2012-09-24 138 views
2

我在C++ Builder中创建了一些C++类。我现在正在VCL表单应用程序中使用它们。我有一个加载文本文件并将字符串作为参数的函数。将unicode字符串转换为字符串

我正在使用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) :参数'stringFilename'中的E2342类型不匹配(想要'const std :: string &',得到'wchar_t *')

我能帮助解决这个问题吗?

+0

你说的是ICU?然后http://userguide.icu-project.org/conversion/converters – 2012-09-24 04:03:14

回答

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); 
+0

感谢您的回答。不过,我的代码仍然有问题。我已添加到我的原始帖子。你能看看吗?谢谢。 – user1690531

+0

@ user1690531:我的链接有你的问题的答案,TCHAR_mapping选项设置为'wchar_t',转到'Project-> Options->目录和条件'并将其更改为'char'。 –

+0

我已将其更改为字符。但我仍然得到同样的错误。 – user1690531