У меня есть проект, который использует MFC и стандарт C++. Я не знаю, в каком VS было изначально сделано. При открытии на машине только с установленным VS2012 и на машине с установленным только VS2010 - он не строится, показывая ошибки, в основном в отношении несоответствия типов. Например:
CListBox <bx
CString s;
ltbx.AddString(s);
Это показывает ошибку, говоря, что AddString не принимает аргумент типа CString. То же самое касается
CListBox <bx
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 года?
AddString принимает LPCTSTR
который является const char*
или const wchar_t*
зависимости от того, определен ли параметр _UNICODE
.
Разница, вероятно, в том, что _UNICODE определен в вашем проекте VS2012.
_UNICODE
следует обратить внимание на изменение кода. Если вам нужен std::basic_string<char>
из CString
, вы можете использовать макрос CT2A
как описано здесь .
ltbx
? Вы не можете объявить ссылку, не делая ссылку на нее.CListBox
и выбираете «перейти к объявлению», где вы получаете