2010-01-22 113 views
0

只需要設置lbl.caption(在一個循環內),但問題比我想象的要大。我甚至嘗試過使用wstrings的矢量,但是沒有這種東西。我讀過一些網頁,嘗試像WideString的()的UnicodeString()的一些功能,我知道我不能,不應該在C++ Builder的2010年C++ builder,label.caption,std :: string to unicode conversion

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; 

寧可關掉的Unicode:[BCC32錯誤] myFile.cpp(129):E2034無法將'std :: string'轉換爲'UnicodeString'

它現在吃了幾個小時。有沒有「快速&髒」的解決方案?它只是工作...

UPDATE

解決。我混合了STL/VCL字符串類。謝謝TommyA

回答

5

問題是你在混合standard template library string classVCL string class。標題屬性需要VCL字符串,它具有STL的所有功能。

工作的例子確實通過了(const char*),這很好,因爲在VCL UnicodeString類構造函數中有這樣的構造函數,但是沒有用於從STL字符串複製的構造函數。

你可以做兩件事情之一,你可以用你的載體,而不是STL的人的VCL串類之一,因此:

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字符串類(正如我在第一個例子中所展示的那樣)。這樣你就不必擁有兩個不同的字符串類。

+0

太棒了..非常感謝你..這幾年我沒有使用VCL。 – qlf00n 2010-01-22 18:32:05