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