Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème pour cout le résultat d'une methode

Sujet résolu
    20 janvier 2021 à 10:40:50

    Bonjour, je suis très nouveau au c++. 

    J'essayais simplement de cout un attribut en utilisant une méthode .getVie() et j'ai l'erreur suivante:

    error: request for member 'getVie' in 'test1', which is of non-class type 'TestProg()'

    Le code est très simple alors ça doit être une erreur toute bête. Le voici:

    Main.cpp:

    #include <iostream>
    #include "TestProg.h"
    
    using namespace std;
    
    int main()
    {
        TestProg test1();
    
        int test = test1.getVie();
        cout << test;
        return 0;
    }
    



    TestProg.h:

    #ifndef TESTPROG_H_INCLUDED
    #define TESTPROG_H_INCLUDED
    
    class TestProg {
    
        public:
        TestProg();
        TestProg(std::string nom = "Nom", int vie = 100);
        void ajoutVie(int vie);
        int getVie() const;
    
        private:
        int m_vie;
        std::string m_nom;
    
    };
    
    
    #endif // TESTPROG_H_INCLUDED
    



    TestProg.cpp:

    #include <iostream>
    #include <string>
    #include "TestProg.h"
    
    TestProg::TestProg() : m_nom ("nom"), m_vie (100) {
    
    
    }
    
    TestProg::TestProg(string nom = "Nom", int vie = 100) : m_nom (nom), m_vie (vie) {
    
    
    }
    
    int TestProg::getVie() const {
    
    return m_vie;
    
    }
    
    void TestProg::ajoutVie(int vie) {
    m_vie += vie;
    
    
    }
    



    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2021 à 12:15:11

      >Le code est très simple alors ça doit être une erreur toute bête.

      Pas bête mais tellement commune que depuis 2011, le standard du C++ a fourni une "nouvelle" syntaxe pour initialiser des variables locales : les accolades à la place des parenthèses.

      Si votre cours ne la mentionne pas, c'est qu'il est bien trop vieux pour être utile.

      Donc, pour faire court, soit vous avez un compilateur antédiluvien :

      TestProg test1;

      Soit vous avez un compilateur récent :

      TestProg test1{};

      Mais, en fait la première version est aussi adéquate, mais c'est aussi bien de savoir que les accolades existent pour éviter cette peau de banane de la vieille syntaxe.

      Pour la petite histoire, de la peau de banane, c'est que votre "TestProg test1();" déclare un type de pointeur sur fonction et pas une variable locale de type "TestProg".

      Donc vérifiez la "fraîcheur" de votre cours.

      -
      Edité par bacelar 20 janvier 2021 à 12:16:53

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        20 janvier 2021 à 22:32:12

        bacelar a écrit:

        >Le code est très simple alors ça doit être une erreur toute bête.

        Pas bête mais tellement commune que depuis 2011, le standard du C++ a fourni une "nouvelle" syntaxe pour initialiser des variables locales : les accolades à la place des parenthèses.

        Si votre cours ne la mentionne pas, c'est qu'il est bien trop vieux pour être utile.

        Donc, pour faire court, soit vous avez un compilateur antédiluvien :

        TestProg test1;

        Soit vous avez un compilateur récent :

        TestProg test1{};

        Mais, en fait la première version est aussi adéquate, mais c'est aussi bien de savoir que les accolades existent pour éviter cette peau de banane de la vieille syntaxe.

        Pour la petite histoire, de la peau de banane, c'est que votre "TestProg test1();" déclare un type de pointeur sur fonction et pas une variable locale de type "TestProg".

        Donc vérifiez la "fraîcheur" de votre cours.

        -
        Edité par bacelar il y a environ 9 heures

        Bonjour !

        D'abord merci pour votre réponse. Ensuite, j'ai échangé 

        TestProg test1();


        pour 

        TestProg test1{};


        dans ma classe main, mais à présent je reçois cette erreur : 

        error: call of overloaded 'TestProg(<brace-enclosed initializer list>)' is ambiguous|.

        Serait-ce possible d'encore m'aider ? Merci d'avance. 

        Au passage, je suis le cours de c++ sur openclassrooms. Peut-être le mentionne-t-il dans des chapitres futurs que je n'ai pas encore lu ? J'essayais juste de prendre de l'avance et de mettre en pratique des cas que je n'avais pas encore fait en suivant les chapitres. 

        Merci encore !

        -
        Edité par vincentmart100 20 janvier 2021 à 22:33:07

        • Partager sur Facebook
        • Partager sur Twitter
          21 janvier 2021 à 0:31:57

          Bonjour,

          Le cours sur openclassrooms ne parle que du C++ d'avant 98.
          Ton compilateur semble aussi très ancien. En attendant de le mettre à jour à une version plus récente, tu peux utiliser l'autre syntaxe que t'a indiqué bacelar.

          • Partager sur Facebook
          • Partager sur Twitter

          En recherche d'emploi.

            21 janvier 2021 à 9:18:49

            Dalfab a écrit:

            Bonjour,

            Le cours sur openclassrooms ne parle que du C++ d'avant 98.
            Ton compilateur semble aussi très ancien. En attendant de le mettre à jour à une version plus récente, tu peux utiliser l'autre syntaxe que t'a indiqué bacelar.


            Bonjour, 

            merci de la réponse. L'autre syntaxe, c'est à dire celle avec les accolades ? Car lorsque je l'utilise, mon compilateur me retourne cette erreur:

            error: call of overloaded 'TestProg(<brace-enclosed initializer list>)' is ambiguous|.

            Est-ce dû à une autre erreur dans mon code ? 

            • Partager sur Facebook
            • Partager sur Twitter
              21 janvier 2021 à 9:34:27

              bacelar a écrit:

              Donc, pour faire court, soit vous avez un compilateur antédiluvien :

              TestProg test1;

              Soit vous avez un compilateur récent :

              TestProg test1{};

              Mais, en fait la première version est aussi adéquate, mais c'est aussi bien de savoir que les accolades existent pour éviter cette peau de banane de la vieille syntaxe.

              • Partager sur Facebook
              • Partager sur Twitter

              En recherche d'emploi.

                23 janvier 2021 à 6:32:57

                Bonjour,

                Ce que je voulais dire c'est que j'avais essayé les deux syntaxes,  mais qu'aucune ne fonctionnait. 

                Finalement, c'était un problème avec l'inclusion de mon .h dans mon projet. Merci de votre aide tout de même. 

                -
                Edité par vincentmart100 23 janvier 2021 à 7:50:18

                • Partager sur Facebook
                • Partager sur Twitter
                  23 janvier 2021 à 8:49:25

                  Ce post est une erreur

                  -
                  Edité par MichasMoi 23 janvier 2021 à 9:03:35

                  • Partager sur Facebook
                  • Partager sur Twitter

                  for ( size_t nbMembre  :  membreForum )   { std::cout << "Bonjour ! \n"; }

                    25 janvier 2021 à 10:23:02

                    Je suis assez circonspect sur la solution finale.

                    Et je t’enjoins de vérifier que le cours de C++ que tu compulses est de bonne qualité. Celui d'OCR est une calamité.

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                    Problème pour cout le résultat d'une methode

                    × 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