我对c ++很新,并且对标题或模板没有太多经验,而且我没有任何经验。所以,我在尝试使用我创建的类时遇到了问题。我的类定义和标题如下: J.h是模板类J的头文件。
#ifndef J_H
#define J_H
template<class t>
class J {
public:
void speak();
};
#endif
J.cpp有它的标题的函数定义。
#include "J.h"
#include <iostream>
template<class T> void J<T>::speak(){
std::cout << "Hello from j";
}
main.cpp具有main函数并尝试使用J。
#include "J.h"
int main(){
J<int> j;
j.speak();
}
我的问题是,当我使用g++ J.h J.cpp main.cpp
进行编译时,我收到错误undefined reference to J<int>::speak()
,但执行g++ J.h J.cpp
时没有任何错误。我是模板的新手,所以任何帮助都表示赞赏。提前谢谢。
答案 0 :(得分:0)
只需将您的实现放在头文件中即可。
曾经有一个标准允许将模板实现放在自己的源文件(模板导出)中,但支持此功能的编译器很少见(Comeau是我唯一认为的?)。
IIRC,模板导出甚至在C ++ 1x中被弃用。