Проект компилируется только в определенной версии Visual Studio

0

У меня есть проект, который использует MFC и стандарт C++. Я не знаю, в каком VS было изначально сделано. При открытии на машине только с установленным VS2012 и на машине с установленным только VS2010 - он не строится, показывая ошибки, в основном в отношении несоответствия типов. Например:

CListBox &ltbx
CString s;
ltbx.AddString(s);

Это показывает ошибку, говоря, что AddString не принимает аргумент типа CString. То же самое касается

CListBox &ltbx
std::string str;
ltbx.AddString(str.c_str());

Этот код также показывает ошибку:

string str;
CString CInputID;
str = static_cast<string> (CInputID);

В нем говорится, что нет никакого определяемого пользователем преобразования из CString в std :: string.

Несомненно, я должен использовать разные типы для строк и всех, но точно такой же проект, открытый на машине, которая установила VS2010 и VS2008, работает отлично, все типы сопоставлены. Поэтому мой вопрос: как это работает? Я думаю, возможно, VS2008 имеет несколько библиотек, которые определяют все необходимые преобразования, а VS2010 просто использует их. Если да, то какие библиотеки и как я могу заставить этот проект работать на машинах без студийной студии 2008 года?

  • 0
    Есть назначение для этой ссылки ltbx ? Вы не можете объявить ссылку, не делая ссылку на нее.
  • 0
    когда вы щелкаете правой кнопкой мыши на CListBox и выбираете «перейти к объявлению», где вы получаете
Показать ещё 3 комментария
Теги:
mfc
visual-studio-2010
visual-studio-2012
visual-studio-2008

1 ответ

1
Лучший ответ

AddString принимает LPCTSTR который является const char* или const wchar_t* зависимости от того, определен ли параметр _UNICODE.

Разница, вероятно, в том, что _UNICODE определен в вашем проекте VS2012.

  • 0
    Именно в этом и была проблема. Большое спасибо!
  • 0
    Вероятно, стоит отметить, что в VS2013 и далее использование многобайтового набора символов в MFC не рекомендуется, поэтому вместо отмены определения _UNICODE следует обратить внимание на изменение кода. Если вам нужен std::basic_string<char> из CString , вы можете использовать макрос CT2A как описано здесь .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню