Partage
  • Partager sur Facebook
  • Partager sur Twitter

Petite erreur de classe

Sujet résolu
    11 juillet 2007 à 21:07:32

    Bonjour à tous.
    Qu'y a-t-il de faux dans ce code ?
    class truc{
    public:
      void plop() { };
      truc(){ };
    };

    int main(){
      truc pouet();
      pouet.plop();

    Parce que g++ me dit quelque chose que je n'arrive pas bien à comprendre:
    main.cpp: In function «int main()":
    main.cpp:xx: erreur: request for member «plop" in «pouet", which is of non-class type «truc* ()()"
    azmeuk@bulbi:~/Dev/C++/TbMenu$ 

    Merci de m'aider
    • Partager sur Facebook
    • Partager sur Twitter
      11 juillet 2007 à 21:14:15

      si tu vires les parenthèses du constructeur, çà marche o_O !!!

      truc pouet; // <-- celles-là
      pouet.plop();

      • Partager sur Facebook
      • Partager sur Twitter
        11 juillet 2007 à 21:19:13

        Ouais mais dans ce cas là ce constructeur :
          truc(){ };
        n'est plus executé, et j'y tiens !
        • Partager sur Facebook
        • Partager sur Twitter
          11 juillet 2007 à 21:38:04

          Citation : azmeuk

          Ouais mais dans ce cas là ce constructeur :

            truc(){ };

          n'est plus executé, et j'y tiens !


          tu es sûr ? si il n'y a pas de () c'est le constructeur par défaut qui doit être appeler.
          • Partager sur Facebook
          • Partager sur Twitter
            12 juillet 2007 à 1:15:02

            Le fait que ton main déclare une fonction et non une variable locale.

            C'est quelque part dans la FAQ C++ de developpez normalement.
            • 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.
              12 juillet 2007 à 15:26:07

              En gros le code

              truc pouet();

              déclare une fonction pouet qui retourne un objet de type truc...
              Le compilateur a raison de te dire que c'est faux.

              Si tu veux utiliser le constructeur par défaut,
              écris, comme il est dit plus haut,

              truc pouet;
               
              • Partager sur Facebook
              • Partager sur Twitter
                12 juillet 2007 à 19:02:44

                Merci, je ne connaissait pas la subtilité.
                Mais si j'avais un constructeur qui prenait un entier en paramètre, écrire ceci das le main() aurait été juste ?:
                truc pouet(2);
                • Partager sur Facebook
                • Partager sur Twitter
                  12 juillet 2007 à 19:18:31

                  Oui tout à fait. Car 2 n'est pas un type de variable mais un entier.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Petite erreur de classe

                  × 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