我遇到了一些问题(即链接错误)与函数模板的显式实例化.在Visual Studio下项目链接正常,只有在g / Unix下,使用
Eclipse-CDT,链接产生错误.
函数调用是静态库的一部分,静态库与大型项目中的动态库链接.
该功能的架构如下:
>在MathUtils.h文件中的命名空间内声明(但未实现)的函数模板.其中一个函数参数本身就是一个struct模板,它在这个h文件中声明并实现(在同一名称空间下).
>函数实现和实例化在MathUtils.cpp中.
>函数调用在someFile.cpp中(当然#include“MathUtils.h”),它是编译的&作为静态库的一部分链接.
让我(几乎)疯狂的事情是,构建错误不是完全可重现的,我怀疑Eclipse应该受到指责(可能会跳过一些步骤,尽管我在每次构建之前都使用了干净的项目).
大约一个小时,Debug配置构建了无错误但发布失败,未定义引用…链接错误.
然后,对于下一个小时,两个配置都失败了.然后我做了一个小项目,只有上面提到的3个文件,并从命令行和Eclipse编译它 – 没有任何错误.现在两个配置似乎都链接好了.
有没有人使用Eclipse-CDT遇到过类似的问题?有什么建议?
编辑:由于问题不容易(或根本没有)可重现,我想这将很难得到答案.如果我有任何新的见解,我会更新.
最佳答案 我遇到了类似的问题.通过使用类实现在.cpp中实现之后移动实例化来解决它.
myclass.hpp:
template <class T>
class MyClass
{
public:
MyClass();
// other declarations
};
myclass.cpp:
#include "myclass.hpp"
template <class T>
MyClass<T>::MyClass()
{
}
template class MyClass<int>;
template class MyClass<bool>;