[C++] Quel genre d'erreur ?

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,

Je voudrais vous demander gentiment c'est quoi ces deux lignes que la zone de mort affiche :

1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall compte::afficher(void)" (?afficher@compte@@QAEXXZ) referenced in function "public: void __thiscall compte_epargne::afficher(void)" (?afficher@compte_epargne@@QAEXXZ)
ex3tp5\Debug\ex3tp5.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://c:\Documents and Settings\khaoula\Mes documents\Visual Studio 2005\Projects\ex3tp5\ex3tp5\Debug\BuildLog.htm"

Les fichiers que j'ai écrit sont :
compte.h:
#include<iostream>
using namespace std;

class compte
{
protected:
	long num;
	double solde;
public:
	void ajouter(double);
	void retirer(double);
	void afficher();
};

class compte_epargne : public compte
{
public:
	float taux;
	compte_epargne(long l, double s, float t)
	{
		num=l;
		solde=s;
		taux=t;
	}
	void ajouter(double s)
	{
		solde+=s;
	}
	void retirer(double s)
	{
		solde-=s;
	}
	void afficher()
	{
		compte::afficher() ;
		cout <<"interet"<<interet()<<endl ;
	}
	double interet()
	{
		return taux*solde;
	}
};
class compte_courant : public compte
{
public:
	void ajouter(double s)
	{
		solde+=s;
	}
	void retirer(double s)
	{
		float temp;
		temp=solde-s;
		if(temp>-500)
			solde-=s;
		else
			cout <<"min 5D"<<endl;
	}
	void afficher()
	{
		cout<<"le numero du compte est : "<<num<<" et le solde est : "<<solde<<endl;
	}
};

et main.cpp:
#include<iostream>
#include"compte.h"

int main()
{
	compte_epargne C(15,1000,2);
	C.afficher();
	return 0;
}


Merci.

4 réponses

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Salut,

Ton compilateur cherche une définition de Compte::aficher() mais il ne la trouve pas. Pourtant il en a besoin ici dans compte_epargne:
void afficher()
{
	compte::afficher() ;
	cout <<"interet"<<interet()<<endl ;
}
0
Utilisateur anonyme
 
Merci.

Mais j'ai défini déjà la méthode afficher :S
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
salut.
Dans ce que tu nous a donner, tu as déclaré compte::afficher(), mais tu ne l'as pas défini/implémenté.
Dans un .cpp supplémentaire, tu devrai avoir :
void compte::afficher(){...};
ou alors la déclarer "virtual" et ne pas l'appeler par la suite.
Remarque, dans tout les cas je pense qu'il faut la déclarer virtuelle étant donner que tu la redéfini dans les class dérivées.
0
Utilisateur anonyme
 
Merci bien.

J'ai défini la méthode affiche et le programme tourne normalement.

Pour le type virtual, je le découvre pour la première fois :P, merci de l'information.

Cordialement :)
0