2010-01-22 6 views
0

juste besoin de régler la lbl.caption (dans une boucle), mais le problème est plus grand que je pensais. J'ai essayé même avec le vecteur de wstrings mais il n'y a aucune telle chose. Je l'ai lu quelques pages, essayé certaines fonctions comme WideString(), UnicodeString(), je sais que je ne peux pas et ne devrait pas désactiver Unicode en C++ Builder 2010.C++ constructeur, Label.Caption, std :: string à la conversion 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 erreur] MonFichier.cpp (129): E2034 Impossible de convertir 'std :: string' à 'UnicodeString'

Il me a mangé quelques heures maintenant. Y at-il une solution « rapide & sale »? Il a juste besoin de travailler ...

MISE À JOUR

Résolu. J'ai mélangé des classes de chaînes STL/VCL. Merci TommyA.

Répondre

5

Le problème est que vous mélangez standard template library string class avec le VCL string class. La propriété caption attend la chaîne VCL qui a toutes les fonctionnalités de la STL.

L'exemple qui fonctionne passe réellement (const char*) ce qui est bien car il existe un constructeur pour cela dans le constructeur de classe VCL UnicodeString, mais il n'y a pas de constructeur pour copier à partir de chaînes STL.

Vous pouvez faire une des deux choses, vous pouvez utiliser l'une des classes de chaîne VCL dans votre vecteur au lieu de ceux de la STL, de sorte que:

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

Devient:

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

En Dans ce cas, les deux lignes inférieures fonctionneront également. Sinon, vous pouvez récupérer le pointeur de caractères à zéro terminal réel des chaînes de STL et de les transmettre à la légende, à quel point il sera converti en une classe VCL chaîne comme ceci:

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

Quelle est la solution que vous préférez est jusqu'à vous, mais à moins que vous avez un besoin spécifique pour la classe de chaîne STL Je vous conseillerais fortement d'aller avec les classes de chaîne VCL (comme je l'ai montré dans mon premier exemple). De cette façon, vous n'aurez pas à avoir deux classes de chaînes différentes.

+0

Très bien .. Merci beaucoup Beaucoup ... Cela fait quelques années que je n'utilise pas les VCL. – qlf00n