Partage
  • Partager sur Facebook
  • Partager sur Twitter

"Undefined reference to" récurent...

    7 août 2019 à 1:14:12

    Bonjour,

    J'apprend à développer en C++. J'utilise l'IDE Visual Studio Code, j'ai configuré le logiciel pour qu'il puisse compiler un code C++ via g++...

    Depuis que j'utilise le logiciel, j'ai pas mal de problèmes en ce qui concerne les inclusions de fichiers ".hpp". Lors de la compilation de mes programmes, l'erreur qui me bloque est "undefined reference to {nomDeLaFonctionMembre}". 

    En ce qui concerne le message d'erreur précis, le voici:

    • C:\Users\alexi\AppData\Local\Temp\ccSVVcYv.o:main.cpp:(.text+0x2b): undefined reference to `Test::Test(int, float)'
    • C:\Users\alexi\AppData\Local\Temp\ccSVVcYv.o:main.cpp:(.text+0x38): undefined reference to `Test::getAttribute1() const'

    Voici le code courant:

    test.hpp

    #pragma once
    
    class Test
    {
        public:
            Test(int atb1, float atb2 = 5);
    
            int getAttribute1() const;
            float getAttribute2() const;
    
            void setAttribute2(float value);
        private:
            const int attribute1;
            float attribute2;
    };

    test.cpp

    #include "../headers/test.hpp"
    
    Test::Test(int atb1, float atb2) : attribute1(atb1) {
        this->setAttribute2(atb2);
    }
    
    int Test::getAttribute1() const {
        return this->attribute1;
    }
    
    float Test::getAttribute2() const {
        return this->attribute2;
    }
    
    void Test::setAttribute2(float value) {
        this->attribute2 = value;
    }

    main.cpp

    #include <iostream>
    #include "../headers/test.hpp"
    
    int main() {
        Test test(14, 15.0f);
    
        std::cout << test.getAttribute1() << std::endl;
    
        system("PAUSE");
    }

    Et voici la hiérarchie de tous les fichiers.

    hiérarchie des fichiers

    -
    Edité par AlexisPocquet3 7 août 2019 à 1:17:11

    • Partager sur Facebook
    • Partager sur Twitter
      7 août 2019 à 2:09:34

      Les "undefined reference to xxx" sont des erreurs de link: il manque des bibliothèques ou des .o (fichier objet). Ici, tu ne compiles que main.o avec ton programme, il te manque test.o.

      Je en sais pas comment fonction VSC, mais il faut faire dépendre ton binaire des .cpp qu'il utilise.

      -
      Edité par jo_link_noir 7 août 2019 à 2:09:57

      • Partager sur Facebook
      • Partager sur Twitter
        7 août 2019 à 8:49:42

        Salut,

        A prendre avec des pincettes, mais si tu utilises une extension telle que Code Runner, je ne suis pas sûr qu'elle prenne en compte les .cpp autres que le fichier courant. Cela pourrait être à l'origine de ton soucis.

        • Partager sur Facebook
        • Partager sur Twitter
          7 août 2019 à 10:01:50

          VSCode n'a pas de base de "build system" intégré pour le C++ (même avec l'extension C++).

          Actuellement je dirais que tu as deux solutions pour avoir un minimum d'automatisation:

          - utiliser la "solution de base" de VSCode pour le C++: écrire à la main les lignes de commandes de ton compilateur dans un tasks.json. Si tu débutes, cela me semble être une bonne solution.

          - utiliser CMake combiné avec l'extension Cmake Tools de VSCode. Ça marche plutôt bien, mais attends d'être un peu à l'aise avec ton compilateur.

          • Partager sur Facebook
          • Partager sur Twitter
            7 août 2019 à 12:49:30

            Merci pour tous les commentaires. Au final j'ai simplement décidé de revenir sur Visual C++, un outil plus simple d'utilisation lorsque l'on programme en C++. VSCode me demandait trop d'efforts au niveau des configurations et je ne m'y sentais pas à l'aise.
            • Partager sur Facebook
            • Partager sur Twitter

            "Undefined reference to" récurent...

            × 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