0

テンプレートを使用した 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)

明らかなエラーはありますか?助けていただければ幸いです。

4

0 に答える 0