有一个代码在不同的文件中。abc2.cpp
template <typename T>
void ABC2::set(std::vector<T> t) {
n = t.at(0);
}
abc.h
class ABC2 {
public:
int n = 0;
ABC2() {}
~ABC2() {}
template <typename T>
void set(std::vector<T> t);
};
我正在尝试编译它,但在链接阶段发生错误:对未解析的外部符号的引用。问题是,是否可以在另一个文件中定义非模板类的模板方法?
模板函数定义必须在 .h 文件中。原因是模板本质上是一个宏,需要在编译时进行扩展。如果它不可用 - 并且因为它位于不同的 .cpp 文件中而对您不可用 - 那么这就是未定义的外部符号发生的地方。