.cpp文件中模板类的非模板方法-未定义的引用
Non-template methods of a template class in .cpp file - Undefined reference?
我知道模板函数必须在头文件中定义,由于某种原因我忘记了。然而,我相信非模板函数,即使它们属于模板类,也可以在.cpp文件中定义。这是允许的吗?如果不是,为什么不呢?谢谢:)
实际上,在使用时必须在headers/中定义的是"模板实体"(除非在其他地方发生显式实例化)。到目前为止,c++中还没有这样的术语,但将其添加到语言中的建议正在迅速增加,因为许多规则适用于"模板化实体",而不仅仅适用于模板。
见http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0391r0.html
原因应该很明显。就像模板一样,模板的成员可以使用模板参数,因此它们的源必须可用于实例化。
对于类(如果成员函数不使用template形参),解决这个问题的技巧是将函数放在非模板基类中,并从类模板继承该类。相关文章:
- 在C++中使用内联方法时出现未定义的符号错误
- 对显式实例化的模板函数的未定义引用
- 在模板类之外定义友元函数的正确方法是什么?
- 2个模板化类的非模板友元函数未定义引用错误
- 对结构方法的未定义引用
- 未定义的类模板不会实例化以检查友元函数
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- 对使用 CMake 生成为 lib .a 的方法的未定义引用
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 对于我的 ComplexNumber 中的某些方法,我得到了一个奇怪的未定义错误引用.cpp,不过我对模板很陌生
- 专用纯虚拟模板函数(未定义引用)的另一个问题
- 编译器说模板类中的方法未定义,除非我将其设为虚拟
- 静态库中具有外部模板的未定义符号
- 使用模板时未定义的引用
- 对 C++ 中模板方法的未定义引用
- 重载的模板方法未按预期解析
- 模板方法未实例化
- 单例作为模板,未定义错误
- .cpp文件中模板类的非模板方法-未定义的引用
- C++对模板类方法的未定义引用