Bonjour, je souhaite implémenter un héritage en diamant avec 3 classes de bases abstraites plus une classe normale. Le problème et que je n'arrive pas à mettre en place des attributs communs à toutes les classes.

Pour être plus clair, j'ai imaginé un petit exemple :


Voila mon code, qui ne compile pas :
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
#ifndef _PERSONNAGE_H_
#define _PERSONNAGE_H_
 
class Personnage {
public:
	Personnage(string nom) : nom(nom) {}
	virtual ~Personnage() {}
 
	virtual string getNom() = 0;
protected:
	string nom;
};
 
#endif
 
 
#ifndef _PERSOCOURAGEUX_H_
#define _PERSOCOURAGEUX_H_
 
class PersoCourageux : virtual public Personnage {
public:
	PersoCourageux(string nom, int ptsDeCourage) : Personnage(nom), ptsDeCourage(ptsDeCourage) {}
	virtual ~PersoCourageux() {}
 
	virtual string getNom() = 0;
	virtual string getPtsDeCourage() { return ptsDeCourage; }
private:
	int ptsDeCourage;
};
 
#endif
 
 
#ifndef _PERSOFORT_H_
#define _PERSOFORT_H_
 
class PersoFort : virtual public Personnage {
public:
	PersoFort (string nom, int ptsDeForce) : Personnage(nom), ptsDeForce(ptsDeForce) {}
	virtual ~PersoFort () {}
 
	virtual string getNom() = 0;
	virtual string getPtsDeForce() { return ptsDeForce; }
private:
	int ptsDeForce;
};
 
#endif
 
 
 
#ifndef _GUERRIER_H_
#define _GUERRIER_H_
 
class Guerrier : public PersoCourageux, public PersoFort {
public:
	Guerrier(string nom, int ptsDeCourage, int ptsDeForce) : ptsDeCourage(nom, ptsDeCourage), PersoFort (nom, ptsDeForce) {}
 
	string getNom() { return this->nom; }
};
 
#endif
Comment dois-je faire pour implémenter correctement ce type de structure ? Comment mettre en place des attributs communs aux classes filles ?