[C++] Quel genre d'erreur ?

Résolu/Fermé
Utilisateur anonyme - 4 févr. 2008 à 00:15
 Utilisateur anonyme - 13 févr. 2008 à 13:37
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
4 févr. 2008 à 00:32
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
4 févr. 2008 à 00:47
Merci.

Mais j'ai défini déjà la méthode afficher :S
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 févr. 2008 à 08:47
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
13 févr. 2008 à 13:37
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