在C ++中将tstring转换为字符串

时间:2015-03-01 06:49:34

标签: c++

这是使用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转换为字符串才能删除此错误?

1 个答案:

答案 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(多字节)版本(至少在短期内),因为如果没有彻底的代码审查,您无疑会遇到其他兼容性问题。您可以使用“项目属性”对话框的“常规”部分中的字符集选项来执行此操作。