2015-03-01 2 views
0

Это фрагмент программы, который был скомпилирован с использованием visual studio 6. Однако после компиляции в visual studio 2013. я получаю сообщение об ошибке в следующей строке. Я вставляю ошибку ниже.Преобразование tstring в строку в C++

Это объявлена ​​в заголовочном файле

public: 
Serial(tstring &commPortName, int bitRate = 115200, char *Name = NULL); 

Это в исходном файле

string COMport; 

    cout << "Enter the COM port (eg. COM1): "; 
    cin >> COMport; 

    tstring commPortName(COMport); //**ERROR AT HERE** 
    Serial serialDEVICE(commPortName, 115200, "DEVICE"); 

я получаю следующие ошибки

Error 1 error C2664: 
'std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>:: 
basic_string(std::initializer_list<_Elem>,const std::allocator<wchar_t> &)' 
: cannot convert argument 1 from 'std::string' to 'const 

Вторая ошибка:

IntelliSense: no instance of constructor "std::basic_string<_Elem, _Traits,  
_Alloc>::basic_string [with _Elem=wchar_t, 
_Traits=std::char_traits<wchar_t>, _Alloc=std::allocator<wchar_t>]" matches 
the argument list argument types are: (std::string) 

Должен ли я сделать некоторое преобразование из tstring в строку, чтобы удалить эту ошибку?

ответ

1

tstring не является стандартным типом C++, но я буду считать, что где-то в проекте что-то подобное:

#ifdef UNICODE 
#define tstring std::wstring 
#else 
#define tstring std::string 
#endif 

В сборки Unicode, который Визуальные по умолчанию Студийные в эти дни, tstring в настоящее время определяемый как wstring, то есть для его инициализации требуется широкая строка. Так как COMPort определяется как строка ANSI (std::string), а не как tstring, сборка не выполняется, потому что два типа не являются напрямую конвертируемыми.

Возможно, вам следует изменить проект обратно на сборку ANSI (многобайтовых) (хотя бы в краткосрочной перспективе), так как у вас, без сомнения, будут проблемы с совместимостью без тщательного анализа кода. Вы можете сделать это, используя параметр Character Set в разделе «Общие» диалогового окна «Свойства проекта».

+0

Нет, вы правы, tstring является частью непрерывной тренировки лабиринта функций обработки строк и макросов, чтобы попытаться отменить ущерб, который вызвал Microsoft, не следуя стандартам программирования на С ++, по-видимому, потому, что они хотели для «блокировки» кода для компиляции только в составе компиляторов Microsoft. – Owl

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