Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur LNK1120

error LNK2001: symbole externe non résolu

Sujet résolu
    12 août 2022 à 11:58:06

    bonjour je programme en c++ sur Visual studio quand cette erreur quand je n'ai pas réussi à résoudre est survenue.

    error LNK2001: symbole externe non résolu "private: static int Voiture::compteur" (?compteur@Voiture@@0HA)

    Je suis vraiment désolé car j'avais déjà posté un message pour une autre erreur que je n'avais pas réussi à resoudre il y a quelque jour de celà, mais là je ne trouve aucune solution.

    voici mon code:

    Voiture.hpp:

    #ifndef DEF_VEHICULE
    #define DEF_VEHICULE
    
    class Vehicule //vehicuel est une class abstrait car elle comporte une méthode virtuelle pure( 6 lignes en dessou) on ne peut
    {               //donc pas creer d'objet Vehicule
    public:
        Vehicule();
        Vehicule(int prix);
        virtual void affiche() const;
        virtual int nbrRoues() const = 0; //le =0 signifie que a valeur renvoyer sera null
        virtual ~Vehicule();
        static void methodestatic();//les méthode static ne peuvent pas etre appelé par les objets
    
    protected:
        int m_prix;
        static int attributstatic;
    };
    
    class Voiture : public Vehicule
    {
    public:
        Voiture(int prix, int portes);
        virtual void affiche() const;
        virtual int nbrRoues() const;  //Affiche le nombre de roues de la voiture
        virtual ~Voiture();
        static int nombreinstance();
    
    private:
        int m_portes;
        static int compteur;
    };
    
    class moto : public Vehicule
    {
    public:
        moto(int prix, int vitesse);
        virtual void affiche()const;
        virtual int nbrRoues() const;
        virtual ~moto();
    
    private:
        int m_vitesse;
    };
    
    #endif

    Vehicule.cpp:

    #include "vehicule.hpp"
    #include<iostream>
    using namespace std;
    
    int Vehicule::attributstatic = 5;//elle peut seulement être appelé en dehors de toute fonction (meme main) si elle est privé
    
    Vehicule::Vehicule()
    {
    }
    
    Vehicule::Vehicule(int prix): m_prix(prix)
    {
    
    }
    
    void Vehicule::affiche() const
    {
    	cout << "Ceci est un vehicule coutant "<<m_prix<<"euro"<< endl;
    }
    
    
    Vehicule::~Vehicule()
    {
    }
    
    void Vehicule::methodestatic()
    {
    	cout << "Salut moi c'est jean et ca c'est mon garage." << endl;
    }
    
    Voiture::Voiture(int prix, int portes) : Vehicule(prix), m_portes(portes)
    {
    	++compteur;
    }
    
    void Voiture::affiche() const
    {
    	cout << "Ceci est une voiture avec " << m_portes << " portes et qui coute " << m_prix << "euro" << endl;
    }
    
    int Voiture::nbrRoues() const
    {
    	return 04;
    }
    
    
    Voiture::~Voiture()
    {
    	--compteur;
    }
    
    int Voiture::nombreinstance()
    {
    	return compteur;
    }
    
    moto::moto(int prix, int vitesse): Vehicule(prix),m_vitesse(vitesse)
    {}
    
    void moto::affiche() const
    {
    	cout << "ceci est une moto allant jusqu'a " << m_vitesse << "km/h coutant " << m_prix << "euro" << endl;
    }
    
    int moto::nbrRoues() const
    {
    	return 2;
    }
    
    moto::~moto()
    {
    }

    main.cpp:

    #include "vehicule.hpp"
    #include<vector>
    #include<iostream>
    using namespace std;
    
    int main()
    {
    
        Vehicule::methodestatic();//c'est comme ça qu'on appelle les méthodes static
    
        vector<Vehicule*> listeVehicules;
    
        listeVehicules.push_back(new Voiture(15000, 5));
        listeVehicules.push_back(new Voiture(12000, 3));
        listeVehicules.push_back(new moto(2000, 212));
        Vehicule* ptr(0);
        moto stroumpf(8000, 150);
        ptr = &stroumpf;
        cout << ptr->nbrRoues()<< endl;
    
        Voiture::nombreinstance();
    
        listeVehicules[0]->affiche();
        //On affiche les informations de la première voiture
        cout << listeVehicules[1]->nbrRoues() << endl;
        listeVehicules[2]->affiche();
        //Et celles de la moto
    
        for (int i(0); i < listeVehicules.size(); ++i)
        {
            delete listeVehicules[i];  //On libère la i-ème case mémoire allouée
            listeVehicules[i] = 0;  //On met le pointeur à 0 pour éviter les soucis
        }
    
        return 0;
    }

    Merci beaucoup à tout ce qui sacrifieront de leur temps pour m'aider



    • Partager sur Facebook
    • Partager sur Twitter
      12 août 2022 à 12:20:27

      Tu n'as tout simplement pas défini Voiture::compteur (c'est obligatoire pour les membres déclaré static).
      • Partager sur Facebook
      • Partager sur Twitter
      ...
        12 août 2022 à 12:35:06

        question subsidiaire: dans ton code tu insères un fichier vehicule.hpp, or quand tu nous le présentes, tu indiques que c'est le fichier Voiture.hpp; erreur de saisie sur le forum ?
        • Partager sur Facebook
        • Partager sur Twitter
          12 août 2022 à 12:47:35

          ah oui désolé je me suis trompé c'était une erreure de saisie. @rouloude ou dois-je le définire. j'ai essayé de le définire dans le constructeur de Voitire mais il m'affiche toujours l'erreure
          • Partager sur Facebook
          • Partager sur Twitter
            12 août 2022 à 13:44:32

            Tu l'as fait pour attributstatic de la classe Vehicule et bien c'est pareil !
            • Partager sur Facebook
            • Partager sur Twitter
            ...
              12 août 2022 à 13:59:43

              Pourquoi compteur devrait être statique ?
              • Partager sur Facebook
              • Partager sur Twitter

              git is great because Linus did it, mercurial is better because he didn't.

                12 août 2022 à 14:27:03

                C'est juste pour m'entrainer au méthode et au attribut static.

                Merci beaucoup rouloude maintenant ça marche sans problème.

                -
                Edité par altrastorique 12 août 2022 à 14:33:12

                • Partager sur Facebook
                • Partager sur Twitter

                Erreur LNK1120

                × 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