用C++编写模板

ban*_*ini 1 c++ templates g++

我无法在C++中使用模板进行编程.

请考虑以下文件.

#ifndef _C_H
#define    _C_H

template <class T>
class C {
public:
    C();
    virtual ~C();
}
#endif _C_H
Run Code Online (Sandbox Code Playgroud)

C.cpp

#include "C.h"

template <class T>
C<T>::C() {

}

template <class T>
C<T>::~C() {
}
Run Code Online (Sandbox Code Playgroud)

我尝试在名为main.cpp的文件中实例化一个C实例.

#include "C.h"

int main(int argc, char** argv) {
    C<int> c;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

main.cpp undefined reference to `C<int>::C()'
Run Code Online (Sandbox Code Playgroud)

然后我跑了

g++ -o C.o C.pp
g++ -o main.o main.cpp
Run Code Online (Sandbox Code Playgroud)

但得到错误

main.cpp: undefined reference to `C<int>::C()'
main.cpp: undefined reference to `C<int>::~C()'
Run Code Online (Sandbox Code Playgroud)

我确信这可能是一个明显的错误,但我是一个真正的初学者,所以将不胜感激任何帮助.

谢谢!

Mic*_*sen 5

使用模板时,只要实例化类型,源代码就必须可用,否则编译器无法检查模板代码是否适用于给定类型.将其分为.cpp和.h文件将不起作用,因为其他.cpp文件只知道.h文件.

您基本上必须将所有内容放在.h文件中,或者在实现代码中包含一个额外的文件.