3

好吧,我一直在将我们的游戏引擎移植到 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++”。

4

0 回答 0