1

我在从模板类继承时遇到了一些麻烦。下面的代码无法编译,显示此错误:main.cpp : undefined reference to OBJ1<1000>::method()

父母.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
}

主文件

#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 回答