我的课程定义为:
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() {
}
答案 0 :(得分:1)
您没有构造函数的定义,只有声明。将其添加到头文件的底部:
template<class T, class J, const int X, const int Y>
Example<T,J,X,Y>::Example()
{
// ...
}
它必须位于头文件而不是.cpp文件中,因为模板定义必须在使用它们的转换单元中可见,否则它们将永远不会被实例化,并且您将获得链接器错误。