这是使用visual studio 6编译的程序片段。但是在Visual Studio 2013中编译后,我在接下来的行中收到错误。我在下面粘贴了错误声明。
这在头文件
中声明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转换为字符串才能删除此错误?
答案 0 :(得分:2)
tstring
不是标准的C ++类型,但我会假设你项目中的某个地方类似于:
#ifdef UNICODE
#define tstring std::wstring
#else
#define tstring std::string
#endif
在Visual Studio默认使用的Unicode构建中,tstring
被定义为wstring
,这意味着它需要一个宽字符串来初始化它。由于COMPort
被定义为ANSI字符串(std::string
)而不是tstring
,因此构建失败,因为这两种类型不能直接转换。
您应该将项目更改回ANSI(多字节)版本(至少在短期内),因为如果没有彻底的代码审查,您无疑会遇到其他兼容性问题。您可以使用“项目属性”对话框的“常规”部分中的字符集选项来执行此操作。