C++模板类问题

标签 c++ templates linker-errors

大家好,我只是想练习一些 C++ 模板,但我遇到了链接器错误。有人可以帮我吗? 这是我的代码:

// File: MyClass.h
#ifndef _MYCLASS_H
#define _MYCLASS_H
template<class T> class MyClass {
T value;
public:
MyClass(T v);
~MyClass();
};
#endif // _MYCLASS_H

// File: MyClass.cpp
#include "MyClass.h"
template<class T> MyClass<T>::MyClass(T v) {
value = v;
}
template<class T> MyClass<T>::~MyClass() {

}

// File: main.cpp
#include "MyClass.h"
int main() {
MyClass<int> test(10);
return 0;
}

这是命令行输出:

g++ main.cpp -c
g++ MyClass.cpp -c
g++ main.o MyClass.o -o Out
main.o: In function `main':
main.cpp:(.text+0x1a): undefined reference to `MyClass<int>::MyClass(int)'
main.cpp:(.text+0x2b): undefined reference to `MyClass<int>::~MyClass()'
collect2: ld returned 1 exit status
make: *** [all] Error 1

如您所见,我使用的是 Ubuntu 10.04 和 GNU C++ 编译器。 我在这段代码中遗漏了什么吗?


感谢您的回复。它可以工作,但是没有更好的方法来保护代码吗? 例如,如果我想创建一个非开源库怎么办?! 我想将代码导出到静态库。并将库链接到其他项目...

最佳答案

您必须将完整的模板放入标题中。编译器需要在模板实例化站点查看模板方法的主体 - main.cpp 在您的例子中。参见,例如,C++ FAQ .

关于C++模板类问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6565348/

相关文章:

c++ - 是否有用于介子的工具,类似于/等同于CMake的CPack?

c++ - 初始化是否需要左值到右值的转换?是 `int x = x;` UB 吗?

c++ - 设置QFIle保存目录

objective-c - Iphone - 设备 - 链接器错误

c++ - 实例化 Mat 对象时 opencv 3.0.0 链接器错误

linux - 如何让 Nvidia 的 PhysX 3.3 在 Linux 中链接?

c++ - 在类中强制可变参数模板成员函数实例化

php - 从 newegg 获取商品价格

c++ - "Permanent"标准::setw

c++ - 将类型 T 的多态包装器转换为类型 U?