Partage
  • Partager sur Facebook
  • Partager sur Twitter

Je suis bloqué sur un truc super simple ...

    1 septembre 2018 à 0:05:55

    Bonjour à tous,

    Désolé de vous déranger avec quelque chose d'aussi simple mais ça fait un petit moment que j'ai plus fait de c++ et je n'arrive plus à appeler une méthode. Mon code est très simple :

    // main.cpp
    #include <iostream> #include "test.h" int main() { Objet test; test.texte(4); }
    // test.h
    
    #ifndef TEST
    #define TEST
    
    #include <iostream>
    
    class Objet
    {
      public:
        void texte(short num);
    };
    
    #endif
    //test.cpp
    
    #include"test.h"
    
    void Objet::texte(short num){
      cout << num;
    }

    Donc voilà c'est très simple, je dois juste afficher le chiffre 4 avec "cout" en le faisant passer à travers mon objet "test". Je suis bloqué la dessus depuis plus d'1h et ça me rend fou. J'obtiens toujours cette erreur : "undefined reference to `Objet::texte(short)'
    collect2.exe: error: ld returned 1 exit status" pourtant il me semble avoir tout bien défini ???

    C'est également la première fois que je compile du c++ depuis mon nouveau PC avec MinGW et Atom.

    Merci d'avance pour votre aide ;)



    • Partager sur Facebook
    • Partager sur Twitter
      1 septembre 2018 à 0:21:11

      Salut

      Tu t'es trompé avec ton include, c'est "objet.h" et non "test.h", à remplacer dans le fichier main et le fichier .cpp

      Remplace :

      #ifndef TEST
      #define TEST

      par :

      #ifndef OBJET_H
      #define OBJET_H

      Ajoute std devant cout :

      void Objet::texte(short num)
      {
          std::cout << num << std::endl;
      }
      

      Si tu utilises using namespace std, c'est une mauvaise pratique, ceci t'expliquera pourquoi et diverses solutions pour remplacer ce problème.

      Si tu suis le cours de C++ de OpenClassrooms, abandonne, il n'est plus à jour et t'apprendra des mauvaises pratiques.

      Si tu veux plus de détails, voici un article qui t'expliquera en globalité pourquoi c'est un mauvais cours, à la fin tu verras plusieurs liens d'exemples.

      -
      Edité par XxAnoth-ChaxX 1 septembre 2018 à 0:29:32

      • Partager sur Facebook
      • Partager sur Twitter
        1 septembre 2018 à 0:21:35

        Coucou !!

        J'ai peut-être une réponse :

        Au lieu d'écrire:

        #ifndef TEST
        #define TEST

        Ecrit :

        #ifndef DEF_TEST
        #define DEF_TEST
        • Partager sur Facebook
        • Partager sur Twitter
          1 septembre 2018 à 0:33:27

          Pour rappel, les etapes de la compilation :

          • dans chaque fichier, les #include sont remplacer par le contenu du fichier inclue
          • le resultat est compilé fichier par fichier pour generé un fichier .o
          • les fichiers .o sont liés ensemble pour créer l'application

          L'outil "ld" que tu vois dans le message d'erreur est celui qui s'occupe de l'edition des liens. Donc apres la compilation de chaque fichier individuel. Dans ce n'est pas un problème de syntaxe ou d'include. Si la compilation arrive a l'edition des liens, c'est que toutes les etapes avant se sont bien passées.

          "undefined reference" = l'editeur de lien n'arrive pas a trouver la fonction. Les causes les plus courantes :

          • le fichier .cpp n'est pas correctement configuré dans le projet (<=== c'est probablement ca le probleme ici)
          • oublie d'implémenter la fonction
          • erreur de signature de la fonction (le nom ou le types de paramètres ne sont pas identiques entre le .h et le .cpp)
          • Partager sur Facebook
          • Partager sur Twitter
            3 septembre 2018 à 17:20:38

            Bonjour à tous et merci pour vos réponses

            @gbdivers : Effectivement, j'avais de gros doute quant à la façon dont je compilais mon projet, j'ai donc cherché de ce côté là. D'habitude je code en C sur des microcontrôleur, j'utilise donc toujours des IDE pour réaliser mes projets mais maintenant que je me lance dans la réalisation de projets en C++ sur PC je voulais éviter d’utiliser un IDE mais j'ai oublié qu'il fallait assembler les .o >_<

            Donc on lieu de faire :

            g++ main.cpp

             Je dois juste faire :

            g++ -c main.cpp
            g++ -c test.cpp
            g++ -o test.sh main.o test.o

            Et ça marche ! (Il doit même y avoir un moyen de faire le link automatiquement, je vais chercher)

            @ XxAnoth-ChaxX : Et oui j'avais oublié le std:: devant le cout. Je prend également bonne note de tes remarques concernant le tuto d'OC, la prochaine fois j'essaierais d'aller m'informer ailleurs ;)

            Merci à tous pour votre aide !


            • Partager sur Facebook
            • Partager sur Twitter
              3 septembre 2018 à 17:44:46

              Je vous conseille vivement d'utiliser un IDE pour éviter de perdre votre précieux temps.
              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

              Je suis bloqué sur un truc super simple ...

              × 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