使用带有模板类c ++的标头

时间:2017-05-17 02:46:11

标签: c++ templates header-files

我对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时没有任何错误。我是模板的新手,所以任何帮助都表示赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:0)

只需将您的实现放在头文件中即可。

曾经有一个标准允许将模板实现放在自己的源文件(模板导出)中,但支持此功能的编译器很少见(Comeau是我唯一认为的?)。

IIRC,模板导出甚至在C ++ 1x中被弃用。