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 :

Quel #include pour AnsiString... et string?


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Par défaut Quel #include pour AnsiString... et string?
    Bonsoir.

    Je suis assez désorienté concernant les AnsiString, et la doc en ligne de C++ Builder 2007 ne m'aide pas beaucoup à résoudre mon problème de compilation. Ma question est:

    Quel #include faut-il mettre pour utiliser les AnsiString?

    D'une manière générale comment savoir quel #include mettre pour une fonction donnée?

    Merci d'avance.
    Felipe.

  2. #2
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    De base, tout y est déjà.

    Si tu déclares une AnsiString, tout fonctionne. C'est comme un int, tu ne le déclare pas, c'est reconnue par le compilateur.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Par défaut
    Hum, hum, pourtant, en fonction des include que j'ajoute (ex. vcl.h, string.h, iomanip.h), ça compile ou non, et je ne vois pas la logique...

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    C'est pourtant simple:
    • <vcl.h> : AnsiString est une classe spécifique à la VCL, il est donc probable que ce soit ce header-là le bon...
    • <string.h> : Obsolète. Utiliser <string> si tu as besoin de la classe std::string de la bibliothèque standard C++.
    • <iomanip.h> : Obsolète. utiliser <iomanip> si tu as besoin des manipulateurs de flux de la bibliothèque standard C++.

    bandit boy: Ben non. AnsiString est une classe, et nécessite d'être déclarée.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut
    Je rejoind bandit boy, dans BCB " vcl " est automatiquement declare dans l'entete donc pas de probleme avec AnsiString
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    Je pense que la question a ete mal formulee et surtout sans un morceau de code pour aider a repondre, utilisation de BCB en RAD ou en mode console ?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Oui, la ligne#include <vcl.h> est automatiquement insérée dans le code source à la création.
    Mais en aucun cas la classe AnsiString n'est considérée comme un type de base "comme un int, tu ne le déclare pas, c'est reconnue par le compilateur"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    C'est pourtant simple:
    • <vcl.h> : AnsiString est une classe spécifique à la VCL, il est donc probable que ce soit ce header-là le bon...
    • <string.h> : Obsolète. Utiliser <string> si tu as besoin de la classe std::string de la bibliothèque standard C++.
    • <iomanip.h> : Obsolète. utiliser <iomanip> si tu as besoin des manipulateurs de flux de la bibliothèque standard C++.

    bandit boy: Ben non. AnsiString est une classe, et nécessite d'être déclarée.
    Merci Médinoc, tes messages sont très éclairants. Premièrement, je ne connaissais pas la différence entre string et string.h, iomanip et iomanip.h. Deuxièmement, je me doutais un peu que AnsiString était une classe spécifique à la VCL, mais où est-ce expliqué?

    blondelle, ma question était mal formulée, c'est vrai, excuse le débutant. Le contexte est bien en RAD et pas en console, mais le fichier que je n'arrive pas à compiler est celui d'une Unit.cpp crée par New/Unit, donc pas associé à une form. Il n'y avait donc pas de #include <vcl.h> dedans.

    Encore une question: j'ai à la fois des string et des AnsiString. Que choisir entre les deux? Si j'utilise les AnsiString, je restreins la portabilité de mes sources, non?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Par défaut
    Médinoc, <string> ne fonctionne pas, j'utilise donc <string.h>, idem pour <iomanip>.

  9. #9
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut
    Post le bout de code qui ne fonctionne pas

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Par défaut
    Citation Envoyé par blondelle Voir le message
    Salut
    Post le bout de code qui ne fonctionne pas
    Le Unit1.h est le fichier par défaut, je ne l'ai pas modifié. Voici le Unit1.cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include <string>
    #include <iomanip.h>
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
     
    string a;
     
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    J'ai ajouté deux #include et la ligne string a;

    Le programme compile avec <iomanip.h>, et pas avec <iomanip>.

    ??

  11. #11
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Ok j'ai compris, il faut ecrire " String " la premiere lettre en majuscule est importante idem " AnsiString "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include <string>
    #include <iomanip.h>
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
     
    String a;
     
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Par défaut
    Ca alors! Ok ça marche, merci!

    Donc

    • string a; va avec <string.h>
      String a: va avec <string>


    si j'ai bien compris.

    Encore une fois: où ceci est-il expliqué dans la doc?

  13. #13
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Les mots de commande commence par une majuscule en utilisant la " vcl " BCB
    Quand ton curseur est sur un mot faire F1 tu a l'aide en ligne
    Quand tu ecrit par exemple Edit1->ici tu laisse le temps au compilateur de reagir et il t'affiche la liste des possibilitees de code

  14. #14
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Citation Envoyé par Felipe_ Voir le message
    Ca alors! Ok ça marche, merci!
    Donc
    • string a; va avec <string.h>
    • String a: va avec <string>

    si j'ai bien compris.
    Ben non.
    • String, si je me souviens bien, est juste un bête alias de AnsiString (du moins, quand tu ne compiles pas en unicode, je pense...)
    • string sans namespace va avec le vieux <string.h>
    • std::string va avec <string> (depuis que le C++ est normalisé, toutes les classes standard sont dans le namespace std)

    Et pour savoir que la classe AnsiString vient de la VCL: Par élimination.
    • Si ce n'est pas une classe standard (et d'une part ça n'y ressemble pas car toutes les classes standard sont tout en minuscules, d'autre part ton livre de C++ devrait te le dire),
    • ni une classe MFC (elles commencent par C et ne sont disponibles que sous Visual),
    • ni une classe d'une bilbiothèque extérieure (car je pense que tu ne sais même pas encore en installer)

    Alors ce doit être une classe de la VCL.

    Bien sûr, pour ma part, j'ai appris que c'était une classe de la VCL tout simplement en lisant les messages sur le forum...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Par défaut
    C'était pas si simple, finalement. J'ai bien fait de poser la question, j'ai appris de choses.

    Merci Médinoc.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 36
    Par défaut
    Pour avoir AinsiString en mode console Il suffit d'ajouter rtl.lib, j'avais deja ajouté System.hpp à mon application console initialement mise au point en vcl.

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

Discussions similaires

  1. [RegEx] Quel pattern pour supprimer les derniers <br> d'une string?
    Par rekam dans le forum Langage
    Réponses: 4
    Dernier message: 04/11/2012, 00h55
  2. Réponses: 3
    Dernier message: 04/02/2012, 09h03
  3. QUEL "include" POUR affichage du texte
    Par sali2801 dans le forum C
    Réponses: 7
    Dernier message: 12/03/2011, 12h31
  4. Réponses: 0
    Dernier message: 16/09/2008, 11h49
  5. Quel outil pour du développement Client/Serveur (Win XP) ?
    Par jey_bonnet dans le forum Débats sur le développement - Le Best Of
    Réponses: 5
    Dernier message: 02/11/2002, 14h57

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