Partage
  • Partager sur Facebook
  • Partager sur Twitter

utiliser des strings

Sujet résolu
    7 août 2007 à 13:42:42

    Bonjour,
    pour la premiere fois de ma vie, j'ai décidé de ne plus utiliser de betes chaines de caracteres et de vivre avec mon temps, j'ai logiquement opté pour les strings

    je sais m'en servir, il n'y a pas de souci, mais à la compilation, j'ai le message suivant:
    error: 'string' does not name a type

    j'ai donc cherché un peu, et je ne vois pas vraiment ce qui ne va pas
    voici pour illustrer le deput de mon .cpp

    #include <iostream>
    #include <string>
    #include "curseur.h"

    using namespace std;

    class Curseur
    {
    ...
     


    et de mon .h

    #ifndef CURSEUR
    #define CURSEUR

    class Curseur
    {
            int orgx;
            int orgy;
            int lng;
            int lrg;
            string imagefond;
            string imagecur;
            int clicposx;
            int clicposy;
    ...
     


    et s'il le faut, le debut de main.cpp

    #include "curseur.h"

    int main ( int argc, char** argv )
    {
    ...


    et je ne vois pas à quel endroit j'ai merdé, ce que j'ai fait ressemble pourtant à ce que je vois dans le cours. pourquoi cela ne marche-t'il pas?
    (moi qui profitais justement de l'absence du patron pour coder un peu, je ne peux pas voir le resultat)

    Cordialement
    Nigel
    • Partager sur Facebook
    • Partager sur Twitter
      7 août 2007 à 13:45:07

      Dans ta class déjà tu ne respectes pas l'encapsulation.
      • Partager sur Facebook
      • Partager sur Twitter
        7 août 2007 à 13:47:49

        Citation : Super man

        Dans ta class déjà tu ne respectes pas l'encapsulation.


        où çà ? dans une classe par défaut c'est private.

        Nigel, string est déclaré dans le 1er fichier .cpp car <string> est inclue avant "curseur", mais pas dans main.cpp; le ieux est de rajouter l'include de <string> dans "curseur.h"
        • Partager sur Facebook
        • Partager sur Twitter
          7 août 2007 à 13:52:05

          si, mais j'ai juste montré que les premieres lignes
          j'ai beaucoup de données membres, pas la peine de polluer la mise en page avec plein de variables que vous n'avez pas besoin de connaitre
          il y a le mot cle public: à la ligne 24 de curseur.h
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            7 août 2007 à 13:56:40

            Salut,

            dans le .h, c'est
            std::string image


            Xav57
            • Partager sur Facebook
            • Partager sur Twitter
              7 août 2007 à 14:03:33

              Merci
              et c'est minirop qui avait raison, en l'inclaunt dans le .h ça marche (presque)
              @xav57:
              j'ai opté pour la solution de facilité, je mets "using namespace std;" en debut de code
              ça marche "presque" parce que maintenant je rencontre l'erreur
              "error: redefinition of 'class Curseur'" dans le curseur.cpp, et "error: previous definition of 'class Curseur'" dans le .h

              pour ceux qui se poseraient la question c'est la premiere fois que je fais de l'objet (et presque la premiere fois que je fais de la compilation separée)


              • Partager sur Facebook
              • Partager sur Twitter
                7 août 2007 à 14:05:03

                Dans le .h on ne met pas de using namespace std;
                • Partager sur Facebook
                • Partager sur Twitter
                  7 août 2007 à 14:09:01

                  C'est parecque tu met deux fois class Curseur{};
                  Une fois dans le .h et une fois dans le .cpp !
                  Ne le met que dans le .h et dans le .cpp tu met :

                  Curseur::Curseur() // Constructeur
                  {}

                  void Curseur::Methode() // Fonction membre
                  {}


                  Ainsi pas de redécalration ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 août 2007 à 14:35:22

                    merci, en effet, je venais de le voir
                    c'est reglé
                    bon, maintenant, je trouve plein d'erreurs dans mon code, mais là ça touche à des domaines que je maitrise (en tous cas que je connais)

                    merci à tous pour votre aide
                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 août 2007 à 15:31:25

                      Citation : Super man

                      Dans le .h on ne met pas de using namespace std;



                      As-tu des arguments valables pour coloborer ton affirmation?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 août 2007 à 16:18:29

                        MatteX --> on dit "corroborer" :D

                        Et je pose la même question, tu as des sources pour affirmer ça ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          7 août 2007 à 22:29:36

                          Citation : M@teo21

                          Dans les .h, il est recommandé de ne jamais mettre la directive using namespace std; car cela pourrait avoir des effets néfastes lorsque vous utiliserez la classe par la suite.
                          Par conséquent, il faut rajouter le préfixe "std::" devant chaque string du .h. Sinon, le compilateur vous sortira une erreur du type "string does not name a type".

                          :D
                          • Partager sur Facebook
                          • Partager sur Twitter
                            7 août 2007 à 23:53:08

                            @ MatteX, les arguments valables sont dans ta signature. §10.5
                            :)
                            • Partager sur Facebook
                            • Partager sur Twitter
                            C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                              8 août 2007 à 5:52:43

                              /me se fait tout petit.

                              Bon j'y avais pensé même si j'avoue ne pas toujours respecter cette règle. Mais je penses sérieusement que le commentaire de SuperMan était un peu court, je trouve peu pédagogique pour aider les Zér0s d'avoir des petits messages à caractère négatifs, c'est pas attrayant pour ceux qui veulent apprendre parmi nous.

                              P.S. merci Elrond : j'avoue que mon vocabulaire avait cette lacune.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                8 août 2007 à 13:02:45

                                Oui, il aurait pu broder autour de "déconseillé" ou "fortement déconseillé".

                                Perso, avecun mapping qui va bien sous mon éditeur préféré (i.e. je tape "<alt-s>" pour obtenir "std::"), j'ai tendance à mettre les std:: partout, même dans les .cpp.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                                utiliser des strings

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown