【问题标题】:c++ builder, label.caption, std::string to unicode conversionc++ builder, label.caption, std::string 到 unicode 的转换
【发布时间】:2010-01-22 18:07:34
【问题描述】:

只需要设置 lbl.caption(在循环内),但问题比我想象的要大。我什至尝试过使用 wstrings 的向量,但没有这样的东西。我已经阅读了一些页面,尝试了一些函数,例如 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;

错误:[BCC32 错误] myFile.cpp(129):E2034 无法将 'std::string' 转换为 'UnicodeString'

它现在吃了我几个小时。有没有“快速而肮脏”的解决方案?它只需要工作......

更新

解决了。我混合了 STL / VCL 字符串类。谢谢TommyA

【问题讨论】:

    标签: c++ c++builder vcl


    【解决方案1】:

    问题是您将standard template library string classVCL string class 混合在一起。标题属性需要具有 STL 的所有功能的 VCL 字符串。

    有效的示例实际上是传递 (const char*),这很好,因为在 VCL UnicodeString 类构造函数中有一个构造函数,但是没有用于从 STL 字符串复制的构造函数。

    你可以做两件事之一,你可以在你的向量中使用 VCL 字符串类之一,而不是 STL 类,这样:

    std::vector <std::string> myStringVec(20, "");
    myStringVec.at(0) = "SomeText";
    std::string s = "something";
    

    变成:

    std::vector <String> myStringVec(20, "");
    myStringVec.at(0) = "SomeText";
    String s = "something";
    

    在这种情况下,底部两行也可以使用。或者,您可以从 STL 字符串中检索实际的以空字符结尾的字符指针并将它们传递给标题,此时它将被转换为 VCL 字符串类,如下所示:

    // both lines will now work
    Form2->lblTxtPytanie1->Caption = myStringVec.at(0).c_str();
    Form2->lblTxtPytanie1->Caption = s.c_str();
    

    您更喜欢哪种解决方案取决于您,但除非您对 STL 字符串类有特定需求,否则我强烈建议您使用 VCL 字符串类(如我在第一个示例中所示)。这样您就不必拥有两个不同的字符串类。

    【讨论】:

    • 太棒了.. 非常感谢.. 好几年没用VCL了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多