テンプレートを使用した SomeClass というクラスがあります
someclass.hpp
template<typename T>
SomeClass
{
public:
SomeClass(T& it, int a): t(it), b(a) {
CallMethod();
}
static void PrintSomething() {
std::cout << "static method in SomeClass" <<std::endl;
}
private:
T& t;
int b;
void CallMethod();
}
メソッドは someclass.cpp で定義されています
void SomeClass<T>::Callmethod() {
t.SomeMethod();
}
さて、main.cpp には、
T t;
t.SomeMethod(); //no error
SomeClass<T>::PrintSomething(); //call only this static method, it works
SomeClass<T> SomeClass(t, 2); //error
エラーは、コンストラクター内で呼び出されるすべてのメソッドへの未定義の参照です。そして、デストラクタへの未定義の参照。これは、オブジェクトをインスタンス化する場合のみです。クラスから静的メソッドを呼び出しても問題ありません。オブジェクトファイルを Make に含めました。
私のメイクファイル。
OBJECTS = \
src/main.o \
Src/someclass.o \
sys: $(OBJECTS)
$(CXX) $(CXXFLAGS) -o sys $(OBJECTS) $(LIB)
明らかなエラーはありますか?助けていただければ幸いです。