Krz*_*ter 0 c++ vcl c++builder
只需要设置lbl.caption(在循环内)但问题比我想象的要大.我甚至尝试过使用绳索矢量,但是没有这样的东西.我已经阅读了一些页面,尝试了一些功能,如WideString(),UnicodeString(),我知道我不能也不应该在C++ Builder 2010中关闭Unicode.
std::vector <std::string> myStringVec(20, "");
myStringVec.at(0) = "SomeText";
std::string s = "something";
// this works ..
Form2->lblTxtPytanie1->Caption = "someSimpleText";
// both lines gives the same err
Form2->lblTxtPytanie1->Caption = myStringVec.at(0);
Form2->lblTxtPytanie1->Caption = s;
Run Code Online (Sandbox Code Playgroud)
错误:[BCC32错误] myFile.cpp(129):E2034无法将'std :: string'转换为'UnicodeString'
它现在吃了几个小时.有没有"快速和肮脏"的解决方案?它必须工作......
UPDATE
解决了.我混合了STL/VCL字符串类.谢谢TommyA.
问题是您正在将标准模板库字符串类与VCL字符串类混合.caption属性需要具有STL的所有功能的VCL字符串.
有效的例子是pass(const char*),这很好,因为在VCL UnicodeString类构造函数中有一个构造函数,但是没有用于从STL字符串复制的构造函数.
你可以做两件事之一,你可以使用向量中的一个VCL字符串类而不是STL字符串类,这样:
std::vector <std::string> myStringVec(20, "");
myStringVec.at(0) = "SomeText";
std::string s = "something";
Run Code Online (Sandbox Code Playgroud)
变为:
std::vector <String> myStringVec(20, "");
myStringVec.at(0) = "SomeText";
String s = "something";
Run Code Online (Sandbox Code Playgroud)
在这种情况下,底部两行也将起作用.或者,您可以从STL字符串中检索实际的空终止字符指针并将它们传递给标题,此时它将转换为VCL String类,如下所示:
// both lines will now work
Form2->lblTxtPytanie1->Caption = myStringVec.at(0).c_str();
Form2->lblTxtPytanie1->Caption = s.c_str();
Run Code Online (Sandbox Code Playgroud)
您更喜欢哪种解决方案取决于您,但除非您对STL字符串类有特定需求,否则我强烈建议您使用VCL字符串类(如我在第一个示例中所示).这样您就不必拥有两个不同的字符串类.