这是使用 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 到 string 的转换才能消除此错误?

最佳答案

tstring 不是标准的 C++ 类型,但我假设您项目中的某处类似于:

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

在 Unicode 构建中,Visual Studio 现在默认使用 tstring 被定义为 wstring ,这意味着它需要一个宽字符串来初始化它。由于 COMPort 被定义为 ANSI 字符串 ( std::string ) 而不是 tstring ,因此构建失败,因为这两种类型不能直接转换。

您可能应该将您的项目改回 ANSI(多字节)构建(至少在短期内),因为如果没有彻底的代码审查,您无疑会遇到其他兼容性问题。您可以使用“项目属性”对话框的“常规”部分中的 字符集 选项来完成此操作。

关于c++ - C++中tstring到string的转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28790930/

10-11 18:25