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
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 ?
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
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
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.
git is great because Linus did it, mercurial is better because he didn't.