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++ Discussion :

Erreur de compilation avec CString


Sujet :

C++

  1. #21
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Citation Envoyé par zabibof Voir le message
    LPCSTR n'est qu'un typedef, ça ne devrait pas poser de problème (du moment qu'on include windows.h)
    WinNT.h suffit, mais attention aux includes sauvages.
    Citation Envoyé par zabibof Voir le message
    En tout cas, passer de CString à std::string ne devrait pas poser de problème puisque tous deux peuvent travailler sur un const char* et LPCSTR est un const char*
    Dans la théorie oui, sauf qu'il faut se retaper tous les appels aux méthodes de CString et en adapter le contexte à un appel à une fonction équivalente de la STL. Attention donc au rechercher/remplacer!
    Mais dans le fond, je suis d'accord avec toi, même si je préfère travailler explicitement sur un const char* plutôt qu'un LPCSTR.

  2. #22
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 73
    Par défaut
    Citation Envoyé par spoutspout Voir le message
    Citation Envoyé par Noxen Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string strTerm = p_lpszTerm;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string strTerm(p_lpszTerm);
    devraient être équivalent, ce sont deux appels au constructeur. Ceci-dit, après test, même l'opérateur d'affectation est compatible avec LPCSTR.
    Attention, dans le premier cas, tu appelles le constructeur puis l'opérateur d'affectation, tandis que dans le deuxième cas, tu n'appelles que le constructeur avec un paramètre.
    J'ai parlé un peu vite en disant que c'était faux : ce n'est juste pas la même chose.
    Non, Noxen a raison, il s'agit de deux appels au constructeur. La première ligne est une initialisation, pas une affectation.

  3. #23
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Citation Envoyé par stillman Voir le message
    Non, Noxen a raison, il s'agit de deux appels au constructeur. La première ligne est une initialisation, pas une affectation.
    Au temps pour moi. Après vérification avec VS2005, on ne passe bien que dans le constructeur, et non pas dans l'opérateur =.
    Pourtant je l'aurai parié !

  4. #24
    Membre averti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2003
    Messages : 41
    Par défaut
    Bonjour,

    Merci pour toutes vos informations, mais j'ai une petite question qui n'a plus trop a voir avec le sujet ! (Modo -> Dois-je ouvrir une nouvelle discution)

    Quel est l'équivalent de la ligne ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                 //LPSTR lpczCursor = (LPSTR) (LPCSTR) strTerm;
    en cherchant un peu je pense que cela devrait ressemblé à cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                 char * lpczCursor = (char *) strTerm.c_str();
    Est-ce bien cela ?

  5. #25
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    C'est exactement ça, mais c'est une erreur car tu "contournes" le fait que la chaîne renvoyée ne peut être modifiée. En effet, un LPCSTR est un pointeur constant, c'est à dire que l'objet pointé (chaîne de caractère) ne peut être modifié.

    Dans ton cas ici, la chaîne de caractère renvoyée par c_str() est en plus une partie d'un objet plus gros, std::string. Cela veut dire que si tu utilises le pointeur non constant lpczCursor pour modifier cette chaîne, tu vas accéder et modifier une partie de l'objet std::string sans passer par les méthodes disponibles. Tu risques alors de "foutre le souk" dans le conteneur . C'est pour cette raison que c_str() renvoie un const char*, et non pas un char*.

    Si tu veux tout de même modifier la chaîne renvoyée, tu as deux solution:
    • Agir directement sur le std::string en utilisant ses méthodes
    • Copier la chaîne renvoyée dans un tableau de char via sprintf() par exemple, et modifier cette copie à ta guise

Discussions similaires

  1. Erreur de compilation avec Excel_2k
    Par Debure dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/06/2006, 14h51
  2. Erreur de compilation avec APRO
    Par netchip dans le forum Langage
    Réponses: 1
    Dernier message: 22/04/2006, 23h12
  3. Erreur de compil avec Outp
    Par sixon dans le forum C++
    Réponses: 2
    Dernier message: 27/02/2006, 15h01
  4. Erreur de compilation avec SWITCH et CASE
    Par barbarello dans le forum C++
    Réponses: 4
    Dernier message: 21/01/2006, 21h47
  5. [FreePascal]Erreur de compilation avec Dev-Pascal
    Par youngeikichi dans le forum Free Pascal
    Réponses: 3
    Dernier message: 17/02/2005, 14h22

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