에서 비 템플릿 클래스를 파생 할 때 :문제는 C에서 템플릿 클래스 ++ 나는 내 코드는 다음과 같다</p> <p>필요 마녀 유형을 지정 템플릿 클래스의 비 템플릿 클래스를 상속하기 위해 노력하고있어
기본 클래스 (업데이트)에 대한 헤더 파일을
//base.hpp
template<typename T>
class Base {
public:
Base(T a,int b) :
aa(b) {
this->bb = a;
// ... some code
}
// .. some functions (all are NOT virtual)
protected:
const int aa;
T bb;
// .. some non-constant variables
}
파생 클래스 헤더 코드 :
//derived.hpp
#include <SFML/System.hpp>
#iclude "base.hpp"
class Derived: public Base<sf::Vector2i> {
public:
Derived(float, int, Vector2i);
// .. other methods
protected:
// .. other variables
}
//derived.cpp
#include "derived.hpp"
Derived::Derived(float initf, int myint, Vector2i vec) :
Base(vec, myint) {
// ... some codes
}
을
"sf"는 SFML 라이브러리 작업에 대한 네임 팩을 참조합니다. 나는 cmake를 사용하여 소스에서 컴파일 된 것을 SFML 2.0을 사용하고
(자세한 내용은 당신이 볼 수 : http://www.sfml-dev.org/를)
$ g++ ./main.cpp ./derived.cpp ./base.cpp -lsfml-system
나는이 유사한 명령을 사용하여이 코드를 컴파일하려고
In function `Derived::Derived(float, int, sf::Vector2<int>)':
undefined reference to `Base<sf::Vector2<int> >::Base(sf::Vector2<int>, int)'
이 또한 내가 사용할 C++ (11) 내 C++ 컴파일러로 "g ++ (우분투/리나 4.7.3-1ubuntu1) 4.7.3"을 사용하고 있습니다 :
내가 말할 일부 링커 오류가 발생합니다.
수천 개의 중복 파일 ... base.cpp 파일을 제거하십시오. –
@ kerrek-sb : 아니요! 그게 내 문제가 아니야. 내 메소드를 인라인으로 만들거나 클래스 정의에 포함시킬 때 여전히 문제가 있습니다. – ARF
차고에 차가 있는데, 시작되지 않습니다. 나는 정비공에게 물어 보았고 그에게 증상을 말했다. 나는 열쇠를 돌렸고 아무 일도 일어나지 않았다. * 아마 배터리 일 겁니다. 그래서 저는 배터리를 사서 그것을 설치했습니다. 키를 돌렸고 엔진이 시동을 걸지 않습니다. 후드 아래에 엔진이 없어도 관련이있을 수 있습니다. 그건 내가 배터리가 필요 없다는 것을 의미하지는 않습니다 (나는 배터리가 필요 없습니다!), 그것은 단지 내 차에 다른 문제가있을 수 있음을 의미합니다. –