Поддерживается ли wchar_t в C ++ WDK STL?Я получаю неразрешенный внешний символ :( - PullRequest
1 голос
/ 13 мая 2011

Я компилирую тривиальный файл C ++ Temp.cpp:

#include <string>
int main() { std::wstring s; }

С командной строкой:

cl.exe /MD /Iinc\api\crt\stl60 /Iinc\crt /Iinc\api C:\Temp.cpp
       /LibPath:lib\wxp\i386 /LibPath:lib\crt\i386
       /link /LibPath:lib\wxp\i386 /LibPath:lib\crt\i386

в среде бесплатной сборки WDK 7.1 Windows XP.

Я получаю ошибки ссылки, такие как (LNK2019):

unresolved external symbol "__declspec(dllimport) public: __thiscall
    std::basic_string<wchar_t,struct std::char_traits<wchar_t>,
    class std::allocator<wchar_t> >::~basic_string<wchar_t,
    struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >(void)"
    (__imp_??1?$basic_string@_WU?$char_traits@_W@std@@V?$allocator
     @_W@2@@std@@QAE@XZ) referenced in function _main

Если я использую string вместо wstring, это сработает.

В чем причина проблемы? Как я могу использовать типы wchar_t в моем исходном файле?

Ответы [ 2 ]

6 голосов
/ 13 мая 2011

Скорее всего, было бы установить / Zc: wchar_t-, чтобы отключить wchar_t как внутренний тип. STL6 не имеет большой поддержки для / Zc: wchar_t, который используется по умолчанию, по крайней мере, с VC7.1, возможно, раньше.

Meta: пожалуйста, не используйте STL60 версию STL. В этой версии 1998 года отсутствует большое количество исправлений ошибок, улучшений производительности и работы по соответствию стандартам, которые можно найти в современном STL. Если вы используете набор инструментов компилятора VC, бесплатный VC ++ express включает STL.

Martyn

0 голосов
/ 13 мая 2011

VC6 не поддерживает тип wchar_t , он имеет typedef для unsigned short.Компоновщик сможет найти std::basic_string<unsigned short> только в библиотеке "stl60".

...