我在函数模板的显式实例化方面遇到一些问题(即链接错误)。在Visual Studio下项目链接正常,仅在g++/Unix下,使用Eclipse-CDT,链接产生错误。
在一个大项目中,函数调用是静态库的一部分,它与动态库链接。
函数架构如下:
- 函数模板在我的命名空间内声明(但未实现)
MathUtils.h
文件。函数参数之一本身就是一个结构模板,它被声明为and在此实施h
文件(在同一命名空间下)。
- 函数的实现和实例化位于
MathUtils.cpp
.
- 函数调用位于
someFile.cpp
(当然#include "MathUtils.h"
)它作为静态库的一部分进行编译和链接。
让我(几乎)疯狂的是,构建错误不能完全重现,我怀疑 Eclipse 应该受到指责(也许跳过了一些步骤,尽管我使用clean project
每次构建之前)。
在大约一个小时的时间里,调试配置构建没有错误,但发布失败并显示undefined reference to...
链接错误。
然后,在接下来的一个小时里,两种配置都失败了。然后我做了一个小项目,只有上面提到的 3 个文件,并从命令行和 Eclipse 编译它 - 没有任何错误。现在两种配置似乎都链接正常。
有人在使用 Eclipse-CDT 时遇到过类似的问题吗?有什么建议么?
编辑:由于问题不容易(或根本)重现,我想很难得到答案。如果我有任何新的见解,我会更新。
我有类似的问题。通过移动实例化解决了这个问题after实施于.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>;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)