이것은 나에게 신비한 일입니다. 나는 우분투 ++ g을 사용하고, 내 코드의 일부이다 (클래스 이름 변경과 함께,하지만 아무것도 난 여전히 사방 스텁을 사용하고 있기 때문에) :템플릿이있는 클래스의 멤버 구현이있는 정의되지 않은 참조
Bob.hpp
template <class A>
class Bob : public Jack<Chris, A>
{
public:
Bob(int x1, int x2, float x3 = 1.0, float x4 = 2.0, float x5 = 3.0) throw(Exception);
virtual ~Bob();
};
Bob.cpp
template <class A>
Bob<A>::Bob(int x1, int x2, float x3, float x4, float x5) throw(Exception)
{
}
template <class A>
Bob<A>::~Bob()
{
}
및 I : 나는이 같은 다른 파일에 구현 함수 main': main.cpp:(.text+0x1fd): undefined reference to
밥 : 밥 (INT, INT에서 :
g++ -c Bob.cpp -o Bob.o
g++ -c main.cpp -o main.o
g++ -L"libs" -llib main.o Bob.o prog
나에게 main.o를 제공 :로 컴파일
MAIN.CPP
int main()
{
Bob<Alice> instance(1, 2);
}
:이처럼 사용 float, float) ' collect2 : ld가 1을 반환했습니다. 종료 상태
나는 완전히 엉망이되었습니다. g ++ 링크 단계로 순서를 변경하더라도 아무런 차이가 없습니다. 오브젝트 파일을 컴파일해도 문제는 발생하지 않습니다. 그리고 생성자를 구현할 때 왜 정의되지 않은 참조입니까? 누군가가 이것에 대해 어떤 생각을 밝힐 수 있다면, 대단히 감사 할 것입니다.
[내 템플릿 클래스의 정의를 선언에서 분리하여 .cpp 파일에 넣을 수없는 이유는 무엇입니까?] (http://www.parashift.com/c++-faq-lite/templates.html)를 참조하십시오. # faq-35.12)를 C++ FAQ Lite에서 가져 왔습니다. –
@James McNellis : 왜 대답하지 않으시겠습니까? :) –
@Merlyn : 고품질 답변을 쓸 시간이 없었습니다. 링크 된 콘텐츠를 요약하지 않고도 답변으로 다른 사이트에 대한 링크를 게시하는 것은 일반적으로 나쁜 형태로 간주됩니다. –