簡介。我正面臨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]));
}
}
結果: