好吧,我一直在将我们的游戏引擎移植到 iOS 上,但遇到了一个奇怪的问题。我们的引擎定义了专门用于 char 和 wchar_t 的模板化 String 类。这个类有一个静态的“s_empty”属性:
// MyString.h
namespace MyEngine
{
template <typename T> class String
{
...
static const String s_empty;
};
...
}
//MyString.cpp
namespace MyEngine
{
template <> String<char> const String<char>::s_empty;
template <> String<wchar_t> const String<wchar_t>::s_empty;
// Yes, compiler forces me to start with "template <>"
...
}
该项目的另一个模块使用此变量:
const MyEngine::String<wchar_t> &f()
{
return MyEngine::String<wchar_t>::s_empty;
}
这些东西在不同的平台和各种编译器上运行了很长时间:MSVC+PC86、Codewarrior+NDS 和 Wii。它适用于设备上的 iOS,但不适用于模拟器!在模拟器上,链接器会产生错误:
架构 i386 的未定义符号:“MyEngine::String<wchar_t>::s_empty”
帮助!)
PS“将源编译为”设置为“Objective-C++”。