c++ 构建器、label.caption、std::string 到 unicode 的转换

问题描述 投票:0回答:1

只需设置 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;

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

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

更新

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

c++ c++builder vcl stdstring
1个回答
5
投票

问题是您将 标准模板库字符串类VCL 字符串类 混合在一起。标题属性需要 VCL 字符串,它具有 STL 字符串的所有功能。

有效的示例确实通过了 (

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 String 类,如下所示:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.