我在C ++ Builder中创建了一些C ++类。我现在在VCL表单应用程序中使用它们。我有一个函数加载文本文件并将字符串作为参数。
我正在使用openDialog控件浏览到该文件然后将其打开。
我的问题是:openFialog的.filename属性是UnicodeString的形式,我的函数需要一个std :: string。如何将unicode字符串转换为std :: string?
这是我的代码:
OpenDialog1->Execute();
calCalendar.loadAppointmentsFromFile(OpenDialog1->FileName.t_str());
这是函数定义:
void loadAppointmentsFromFile(const std::string& stringFilename);
我收到以下错误:
[BCC32错误] Assessment2.cpp(39):E2342参数'stringFilename'中的类型不匹配(想要'const std :: string&',得到'wchar_t *')
我可以请一些帮助来纠正这个问题吗?
答案 0 :(得分:1)
使用UnicodeString::t_str获取缩小的字符串。但是,你应该考虑不要混合两者。
另一种选择是首先转换为AnsiString
:
AnsiString str = OpenDialog1->FileName;
std::string s(str.c_str());
loadAppointmentsFromFile(s);
或者
std::string s = OpenDialog1->FileName.t_str(); // TCHAR mapping set to char
loadAppointmentsFromFile(s);