对...的未定义引用:从模板类继承

时间:2012-10-09 09:49:24

标签: c++ templates inheritance

我在模板类的继承方面遇到了一些麻烦。下面的代码无法编译,显示此错误: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();
}

我哪里错了?

1 个答案:

答案 0 :(得分:4)

处理模板时,无法将声明和实现拆分为单独的文件。请参阅this question了解原因(以及更简洁的说明以解决此问题)。

这需要合并(你也可以#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
}