简介。我正面临Objective-C++的一个奇怪的错误。我所有的文件都是正确的类型(.h/.mm而不是.hpp/.cpp)。我使用clib ++(内置于macOS Sierra上的最新版本的xCode,但它在El Capitan上是相同的),而不是libstd ++(即旧版本,甚至不完全支持C++ 11)。Objective-C++可执行文件编译(使用.mm)
问题所在。 我无法使用头文件和可执行文件编译模板类。只有在整个代码被写入标题的情况下!
但是,如果我创建一个非模板类,即使在拆分为2个文件时也可以正常工作。标题:
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) {};
使用例中,引起崩溃:
int main(int argc, char * argv[]) {
auto obj = new TempClass(5);
printf("temp size is %lu\n", sizeof(obj));
auto objV = new TempClassTemplate<int>(10);
printf("temp size is %lu, val is %i\n", sizeof(objV), objV->val);
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
结果: