Bonjour,

Je suis un debutant en c++. J'apprends le c++ par moi-meme. Je fais de la programmation orienté d'objet. Puis, je suis tombé dans une erreur que je ne comprenais pas. Quelqu'un peux m'aider?

Message erreur :
1>------ Début de la génération*: Projet*: trainning, Configuration*: Debug Win32 ------
1>Compilation en cours...
1>Monstre.cpp
1>Génération de code en cours...
1>Compilation en cours...
1>Assassin.cpp
1>Génération de code en cours...
1>Édition des liens en cours...
1>Monstre.obj : error LNK2005: "public: void __thiscall Assassin::perdreSp(int)" (?perdreSp@Assassin@@QAEXH@Z) déjà défini(e) dans Assassin.obj
1>C:\Users\tamere\Documents\Visual Studio 2008\Projects\tamere\Debug\trainning.exe : fatal error LNK1169: un ou plusieurs symboles définis à différentes reprises ont été rencontrés
1>Le journal de génération a été enregistré à l'emplacement "file://c:\Users\tamere\Documents\Visual Studio 2008\Projects\tamere\trainning\Debug\BuildLog.htm"
1>trainning - 2 erreur(s), 0 avertissement(s)
========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
Assassin.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#ifndef DEF_ASSASSIN
#define DEF_ASSASSIN
#include <iostream>
#include <string>
#include "Monstre.h"
 
class Monstre;
 
/* Creer les assassins */
class Assassin
{
	/* Les attributs d'un assassin */
private:
	std::string m_nom;
	char m_class;
	int m_hp;
	int m_sp;
	int m_xp;
	int m_level;
	int m_puissance;
	int m_rapidite;
	int m_energie;
	int m_resistance;
	std::string m_arme;
	bool m_estVivant;
 
	/* Les actions que l'assassin peut faire ou recevoir */
public:
	void perdreHp(int nbDegat);
	void perdreSp(int perte);
	void gagnerXp(int const& levelEnnemi, bool const& ennemiVivant);
	void gagnerHp(bool const& ennemiVivant);
	void gagnerSp(bool const& ennemiVivant);
	void attaquer(Monstre &cible);
	void superAttaque(Monstre &cible);
};
 
#endif
Monstre.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef DEF_MONSTRE
#define DEF_MONSTRE
#include <iostream>
#include <string>
#include "Assassin.h"
 
class Assassin;
 
/* Creation des Monstres */
class Monstre
{
private:
	/* Attribut des Monstres */
	int m_hp;
	int m_sp;
	int m_xp;
	int m_level;
	int m_puissance;
	int m_rapidite;
	int m_energie;
	int m_resistance;
	bool m_estVivant;
 
	/* Action que les monstres peuvent recevoir & faire */
public:
	void perdreHp(int const nbDegat);
	void perdreSp(int perte);
	void attaquer(Assassin &cible);
	void superAttaque(Assassin &cible);
	int getLevel() const;
	bool getVivant() const;
};
 
#endif
Assassin.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include "Assassin.h"
#include <string>
#include <iostream>
using namespace std;
 
void Assassin::perdreHp(int const nbDegat)
{
	if(m_estVivant = true)
	{
		int perte(nbDegat/2);
		perte /= m_resistance;
		m_hp -= perte;
		if(m_hp < 0)
		{
			m_estVivant = false;
			cout << "Vous etes mort" << endl;
		}
		else
		{
			cout << "Vous avez perdu " << perte << " vies" << endl;
		}
	}
	else
	{
		cout << "Vous etes mort" << endl;
	}
}
 
void Assassin::perdreSp(int perte)
{
	if(m_sp > 0)
	{
		m_sp -= perte;
	}
	else
	{
		cout << "Pas d'energie" << endl;
	}
}
 
void Assassin::gagnerXp(int const& levelEnnemi, bool const& ennemiVivant)
{
	if(ennemiVivant == false)
	{
		int gain = levelEnnemi*40;
		gain /= m_level;
		m_xp += gain;
		cout << "Vous avez gagner " << gain << " xp" << endl;
		if(m_xp > 100)
		{
			while(m_xp > 100)
			{
				m_xp -= 100;
				m_level += 1;
				cout << "Felicitation : vous avez atteint le niveau " << m_level << endl;
			}
		}
	}
}
 
void Assassin::gagnerHp(bool const& ennemiVivant)
{
	if(ennemiVivant == false)
	{
		int gain(m_rapidite/5);
		gain *= 2;
		m_hp += gain;
		cout << "Vous avez gagner " << gain << " vie." << endl;
	}
}
 
void Assassin::gagnerSp(bool const& ennemiVivant)
{
	if(ennemiVivant == false)
	{
		int gain(m_rapidite/5);
		gain *= 2;
		m_sp += gain;
		cout << "Vous avez gagner " << gain << " sp." << endl;
	}
}
 
void Assassin::attaquer(Monstre &cible)
{
	cout << "Vous avez attaquer" << endl;
	int forceDattaque(m_puissance/2);
	cible.perdreHp(forceDattaque);
	if(cible.getVivant() == false)
	{
		gagnerXp(cible.getLevel(),cible.getVivant());
		gagnerHp(cible.getVivant());
		gagnerSp(cible.getVivant());
	}
}
 
void Assassin::superAttaque(Monstre &cible)
{
	int coutEnergie(100/m_energie*m_level);	
	int forceDattaque(m_energie*2);
	if(coutEnergie < m_sp)
	{
		cout << "Vous avez faite un super-pouvoir" << endl;
		perdreSp(coutEnergie);
		cible.perdreHp(forceDattaque);
		if(cible.getVivant() == false)
		{
			gagnerXp(cible.getLevel(),cible.getVivant());
			gagnerHp(cible.getVivant());
			gagnerSp(cible.getVivant());
		}
	}
	else
	{
		cout << "Vous n'avez plus d'energie" << endl;
	}
}
main.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
	system("PAUSE");
	return 0;
}
Monstre.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "Monstre.h"
#include <iostream>
using namespace std;
 
void Monstre::perdreHp(int const nbDegat)
{
	if(m_estVivant = true)
	{
		int perte(nbDegat/2);
		perte /= m_resistance;
		m_hp -= perte;
		if(m_hp < 0)
		{
			m_estVivant = false;
			cout << "Le monstre est mort" << endl;
		}
		else
		{
			cout << "Dommage de " << perte << " vies" << endl;
		}
	}
	else
	{
		cout << "Le monstre est mort" << endl;
	}
}
 
void Assassin::perdreSp(int perte)
{
	if(m_sp > 0)
	{
		m_sp -= perte;
	}
	else
	{
		cout << "Pas d'energie" << endl;
	}
}
 
 
int Monstre::getLevel() const
{
	return m_level;
}
 
bool Monstre::getVivant() const
{
	return m_estVivant;
}
J'en serais beaucoup reconnaissant si vous m'aidiez. Infiniment merci d'avance.