实例化一个类模板并调用它的方法

时间:2012-01-25 10:33:51

标签: c++ templates header-files

  

可能重复:
  Why can templates only be implemented in the header file?

当我包含MyClass.h并执行:

MyClass<int, int> ccc = MyClass<int, int>();
ccc.myMethod1(3, 4);

我收到很多错误,告诉构造函数和方法未定义的引用......但是当我包含MyClass.cpp(这不是一个正确的代码原因)时,没有错误!如何解决?

我正在使用g ++编译Code :: Blocks

1 个答案:

答案 0 :(得分:2)

原因是模板类没有编译,只编译实例化的模板。

经验法则:不要将模板实现放在cpp文件中,而是直接放在标题中或标题包含的另一个文件中(如果你想从界面部分实现)。

E.g:

myclass.h

template<typename A>
class MyClass
{
    ...
};

#include "myclass.inc"

myclass.inc

//implementation goes here: 
....