2015-03-17 5 views
1

Проект C++ может быть скомпилирован VS6 без ошибок & предупреждений. С VS 2013 проф. Возникают проблемы с компоновщиками. Они предоставляют шаблон, а именно std :: basic_string.Перемещение IDE на C++ из VS 6 в VS 2013

Код был написан в 2007 году, но не по мне.

Реферирован конструктором:

vrun.obj: ошибка LNK2019: неразрешенный внешний символ «__declspec (DllImport) общественность: голец сопза * __thiscall станд :: basic_string, класс станд :: распределитель> :: c_str (void) const "(__imp_? c_str @? $ basic_s tring @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std @@ QBEPBDXZ) ссылка на забастовку" public: __thiscall VTrs :: VTrs (класс VMessageContext &) "(?? 0VDMTrs @@ QAE @ AAVVDMMessageHandlerContext @@@ Z)

В vrun.cpp:

VTrs::VTrs(VMessageContext& handler_): 
Inherited(RXS::rName().c_str()), 
_handler(handler_) 
{ 
} 

(c_str ->const char* c_str() const; --- C98 стиль --- C11 не был применен в проекте до пока)

В vrun.h:

VTrs(VMessageContext&); 

Реферировано оператором:

vrun.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) 
public: int __thiscall std::basic_string<char,struct std::char_traits<char>,cl 
ass std::allocator<char> >::compare(char const *)const " ([email protected]?$basi 
[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) referenced in 
function "bool __cdecl std::operator==<char,struct std::char_traits<char>,clas 
s std::allocator<char> >(class std::basic_string<char,struct std::char_traits<c 
har>,class std::allocator<char> > const &,char const *)" ([email protected] 
[email protected]@@[email protected]@[email protected]@[email protected]@[email protected][email protected]@[email protected]@V?$a 
[email protected]@[email protected]@[email protected]@Z) 

Относится к стандартному оператору, как интерпретируется. (Перегрузка оператора не выполняется для ==, которая относится к строке)

Кстати, сам код не содержит «std::basic_string». Была прочитана статья в соответствии с msdn, но эта проблема еще не была решена.

«Обычные» проблемы, такие как модификации модификатора "C", уже рассмотрены для другого кода.

Любой намек на то, как с этим справиться?

EDIT: При первом запуске проекта в Visual Studio 2013 был показан вид диалогового окна преобразования. Я согласился, но это повлияло на каталоги VC++. Это было видно при сравнении файла проекта с ClearCase с предыдущей версией. UndoCheckout (через ClearCase) применил старое состояние. Теперь это работает.

+1

RXS :: rName(). C_str() обязательно выглядит как std :: basic_string :: c_str для меня – paulm

+1

string :: c_str() - встроенная функция, у вас никогда не должно быть зависимости от ссылки.Я могу только догадываться, что вы компилируете старую версию заголовка ''. Используйте параметр/showIncludes компиляции и убедитесь, что все файлы заголовков поступают из нужного каталога. –

ответ

0

При открытии проекта в первый раз с Visual Studio 2013, . Я согласился, но это повлияло на каталоги VC++. Это было видно при сравнении файла проекта с ClearCase с предыдущей версией. UndoCheckout (через ClearCase) применил старое состояние. Теперь это работает.

0

Ваш компоновщик должен получить новую библиотеку STD библиотеки MSVC из соответствующего файла lib, и он должен выбрать это при миграции проекта. Взгляните на «Свойства проекта» - «Свойства конфигурации» -> «Вставить ссылку» -> «Ввод» и убедитесь, что «Игнорировать все библиотеки по умолчанию» установлено в No

Смежные вопросы