1

テンプレートクラスからの継承に問題があります。以下のコードはコンパイルされず、このエラーが表示されます:main.cpp : undefined reference to OBJ1<1000>::method()

parent.h

template <int nb>
class PARENT
{
  PARENT() {};
  ~PARENT() {};

  virtual void method() = 0;
  enum { nb_ = nb };
};

obj1.h

#include "parent.h"

template <int nb>
class OBJ1 : public PARENT<nb>
{
  virtual void method();
};

obj1.cpp

#include "obj1.h"

template <int nb>
void OBJ1<nb>::method()
{
  //code
}

main.cpp

#include "obj1.h"

int main()
{
  OBJ1<1000> toto;
  toto.method();
}

私はどこが間違っていますか?

4

1 に答える 1

4

テンプレートを扱う場合、宣言と実装を別々のファイルに分割することはできません。理由(およびこれを回避するためのより簡潔な説明)については、この質問を参照してください。

これをマージする必要があります(#include実装ファイルをヘッダーに挿入して、プリプロセッサにマージを実行させることもできます)。

// obj1.hpp

#include "parent.h"

template <int nb>
class OBJ1 : public PARENT<nb>
{
  virtual void method();
};

template <int nb>
void OBJ1<nb>::method()
{
  //code
}
于 2012-10-09T09:51:34.257 に答える