介绍。我在使用Objective-C ++时遇到了一个奇怪的错误。我的所有文件都是正确的类型(.h / .mm而不是.hpp / .cpp)。我使用clib ++(内置于macOS Sierra的最新版本的xCode,但它在El Capitan上的方式相同)而不是libstd ++(这是较旧的,甚至不完全支持C ++ 11)。
问题所在。 我无法使用标头和可执行文件编译模板类。仅在整个代码写入标题的情况下!
但是,如果我创建一个非模板类,即使分成2个文件也可以正常工作。部首:
L11
可执行文件:
class TempClass {
public:
TempClass(int x);
~TempClass() {};
};
模板类代码。部首:
TempClass::TempClass(int x) {}
可执行文件:
template <typename T> class TempClassTemplate {
public:
TempClassTemplate(T v);
~TempClassTemplate() {};
T val;
};
用法示例,导致崩溃:
template<typename T> TempClassTemplate<T>::TempClassTemplate(T v) : val(v) {};
结果:
答案 0 :(得分:0)
问题不在于Objective-C或Objective-C ++。它纯C ++已知的问题,但编译器提供的信息不足。 您只能制作模板类 - 标题。但是有一些走路。阅读本文以获得完整答案:http://www.codeproject.com/Articles/48575/How-to-define-a-template-class-in-a-h-file-and-imp
但简短的解决方案是在.cpp / .mm文件的末尾写下所有可能的模板类用法,如下所示:
template class TempClassTemplate<int8_t>;
template class TempClassTemplate<int16_t>;
template class TempClassTemplate<int32_t>;