IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

string et UnicodeString (c++ builder firemonkey)


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par défaut string et UnicodeString (c++ builder firemonkey)
    Bonsoir,

    Juste une petite question ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       string s = "ok";
       Edit1->Text = s.c_str();  // pour que Edit1->Text soit compatible avec string et affiche s
       // comment faire pour que s prenne la valeur de Edit1->Text ?
       s.c_str() = Edit1->Text; // [bcc32 Erreur] Unit1.cpp(27): E2277 Lvalue nécessaire
       s = Edit1->Text.c_str(); // [bcc32 Erreur] Unit1.cpp(27): E2285 Impossible de trouver une correspondance pour 'operator string::=(wchar_t *)'
    Merci d'avance ...

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Ton compilateur te dit tout

    E2277 Lvalue nécessaire : la méthode c_str retourne une valeur constante (ce qui est normal) et donc tu ne peux pas faire l'assignation.

    Et sinon en lisant la documentation de System.UnicodeString (Note: In RAD Studio, string is an alias for UnicodeString.), je ne vois pas la méthode c_str (* c'est une documentation de l'enfer j'ai trouvé cette méthode )
    Donc je pense qu'il y a une confusion entre std::string et string : utilise le type UnicodeString (ou System::UnicodeString mais pas sûr de sa syntaxe )

    Mais tu dois avoir un using namespace std; qui traîne dans ton code qui amène la confusion

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par défaut
    Merci foetus. J'ai tout essayé. Avec ou sans using namespace std.
    J'ai cherché sur l'aide de rad studio et sur le net, rien non plus ...
    Peut-être avec un Variant utilisé pour les variables qui peuvent changer de type à l'exécution ?

  4. #4
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonjour
    en fait il ne s'agit pas de string mais de String
    voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef UnicodeString        String
    ;

    je dirais donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String S= L"OK";
    Edit1->Text=S;
    // avec Compilateur CLANG BCC32C
    S=Edit1->Text.c_str();
    //ou avec le compilateur Borland BCC32
    S=Edit1->Text;

    autre possibilité en utilisant la librairie Standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //ne pas oublier le fichier #include <string>
     
    std::wstring S=L"OK";
        Edit1->Text=S.c_str();
        S=L"";
        S=Edit1->Text.c_str();
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par défaut
    Bonjour DjmSoftware.

    Dans mon code le string est considéré comme un tableau. Ce qui n'est pas le cas avec String.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      string s ="ok";
      s.size(); // pour par exemple connaître le nombre de caractères.
    Cordialement

  6. #6
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonjour
    quelles sont les fichiers include utilisés dans ton app?

    par ailleurs C++ builder utilise Unicode donc tes chaines de caractères sont codées sur 2 octets, la classe UnicodeString a été développée à cet effet, dans le cas ou tu utilise la librairie standard il convient dé-lors d'utiliser la version wchar_t de la bibliotèque string

    donc std:wstring

    attention le type string ou wstring n'est en aucun cas un tableau mais une classe

    l'erreur retournée par le compilateur est parfaitement normale car
    la méthode que tu utilise (Edit1->Text.c_str() te retourne un pointeur de type wchar_t* sur le texte de ton editBox alors que le constructeur de la classe string n’implémente que le type char*

    Attention dans ton code d'utiliser que de l'UnicodeString et de préfixer le texte avec un L
    donc dans ton code
    std::std:wstring S=L"OK"
    si tu oublie le L ton compilateur te le fera immédiatement remarquer

    cdlt

    ci-joint un lien sur un site très bien fait sur la STL http://www.cplusplus.com/reference/string/string/size/





    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. convertir un string en UnicodeString.
    Par magdani dans le forum C++Builder
    Réponses: 2
    Dernier message: 30/05/2018, 16h25
  2. Créer une Image avec un Bitmap C++ Builder Firemonkey
    Par magdani dans le forum C++Builder
    Réponses: 5
    Dernier message: 03/10/2017, 17h38
  3. Réponses: 0
    Dernier message: 11/07/2012, 08h51
  4. mon premier pas avec builder c++ problem avec une string grid
    Par chahinerue6 dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/01/2010, 21h42
  5. Exemple UnicodeString Builder 2009
    Par devroot dans le forum C++Builder
    Réponses: 11
    Dernier message: 14/11/2008, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo