C ++模板类实例创建问题

时间:2014-11-14 04:29:28

标签: c++ templates

我的课程定义为:

template<class T, class J, const int X, const int Y>
class Example {
public:
    Example();
}

在我的main.cpp文件中,我尝试在堆上创建Example的新实例:

Example<classA, classB, 5, 5>* tmp = new Example<classA, classB, 5, 5>();     

编译,但我收到链接器错误:

 "Example<classA, classB, 5, 5>::Example()", referenced from:
      _main in main.o   

这是我在main.cpp中如何使用模板参数的问题吗?

编辑:这是Example.cpp中的构造函数定义:

template<class T, class J, const int X, const int Y>
Example<T,J,X,Y>::Example() {
}

1 个答案:

答案 0 :(得分:1)

您没有构造函数的定义,只有声明。将其添加到头文件的底部:

template<class T, class J, const int X, const int Y>
Example<T,J,X,Y>::Example()
{
  // ...
}

它必须位于头文件而不是.cpp文件中,因为模板定义必须在使用它们的转换单元中可见,否则它们将永远不会被实例化,并且您将获得链接器错误。