当我在同一个.cpp文件中包含模板化和非模板化类时,我遇到了链接时问题。
我浏览了C ++ FAQ 35.13,35.14,35.15并没有解决问题。
http://www.parashift.com/c++-faq-lite/separate-template-class-defn-from-decl.html
我正在使用Xcode 5和clang。
这是示例
class bar{
public:
void barfunc();
};
template <class T>
class foo{
public:
void foofunc();
};
这是cpp文件:
void bar::barfunc(){...my code...}
template <class T>
void foo<T>::foofunc() {...my code...}
//I also put a instance of template class foo in the .cpp file
template class foo<int>;
//But is still generates the link error
错误是
clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
但是当我删除bar类时,错误消失了,有人能告诉我它为什么会产生这个错误吗?
将定义放在头文件中可以解决问题,但它可能会导致另一个代码膨胀的问题,是否有人可以提供其他解决方案?
答案 0 :(得分:1)
我发现了问题,问题是我没有将模板类实例化为我在代码中使用的类型。
这是解决模板实例化问题的解决方案:
将定义放在头文件中,以便编译器获得实例信息。 (缺点,增加加载和编译时间)
- 醇>
实例化代码中使用的所有类型