0
다양한 상황에서 외부 함수를 호출해야하는 클래스가 있습니다. 나는 유연하게 유지하려는, 그래서 나는 단순화 된 예처럼 보이는 펑터, 함수 포인터 등으로 작동합니다 (수치 조리법의 제 3 판에서 영감을) 인터페이스를 사용하고 있습니다 : 지금까지템플릿 클래스와의 연결 오류
class MyClass {
public:
template <class T>
MyClass(T &f_) { f = f_; }
private:
int (*f)(int);
};
int myFn(int i) {
return i % 100;
}
int main() {
MyClass test(myFn);
return 0;
}
을 너무 좋아. g ++은 불만없이 이것을 컴파일합니다. 내 실제 응용 프로그램에는 훨씬 많은 코드가 있으므로 여러 파일로 분할됩니다. 예를 들어,
test2.h :
#ifndef __test2__
#define __test2__
class MyClass {
public:
template <class T>
MyClass(T &f_);
private:
int (*f)(int);
};
#endif
test2.cpp :
#include "test2.h"
template <class T>
MyClass::MyClass(T &f_) {
f = f_;
}
MAIN.CPP :
#include "test2.h"
int myFn(int i) {
return i % 100;
}
int main() {
MyClass test(myFn);
return 0;
}
I이 사용 g++ test2.cpp main.cpp
를 컴파일하려고, I 다음 링크 오류가 발생합니다.
/tmp/ccX02soo.o: In function 'main':
main.cpp:(.text+0x43): undefined reference to `MyClass::MyClass<int()(int)>(int (&)(int))'
collect2: ld returned 1 exit status
g ++는 test2.cpp도 컴파일하려고한다는 사실을 알지 못합니다. 여기에 무슨 일이 일어날 지에 대한 아이디어가 있습니까?
감사합니다,
--craig
[? 왜 템플릿에만 헤더 파일에서 구현 될 수있다]의 중복 가능성 (http://stackoverflow.com/questions/495021 : 당신은 헤더의 구현을 이동해야 의미
/왜 - 템플릿 전용 헤더 파일에 구현할 수 있는가) –