j'ai un petit souci que je n'arrive pas à résoudre. J'ai essayé de refaire le projet "Guerrier", un peu à ma sauce avec des références.
Ce programme fonctionne quand tout le code est dans le fichier main.cpp, mais quand je dispatche dans des fichiers séparés (classes dans .h, méthodes dans .cpp). Il me met une erreur de compilation. Je vous joins les fichiers, si quelqu'un pouvait m'aider. L'erreur provient du fichier magicien.h à la ligne" void attaquemagicien(guerrier& cible);" et il me met: "guerrier has not been declared". Pourtant, je pense bien avoir intégré le fichier guerrier.h dans ce fichier magicien.h.
J'espère avoir été clair dans l'explication de mon problème.
magicien:: magicien() { cout << "Quel est le nom du magicien? "; cin>> nom; cout << "Quel est le sortilege qu'il possede? (1=verbal, 2=baguette, 3=potion) "; cin>>sortilege; vie=100; }
void magicien:: attaquemagicien(guerrier & cible) { int vieguerrier, sor; int sorti[3]={10,20,30}; vieguerrier=cible.getvie(); vieguerrier=vieguerrier-sorti[sortilege-1]; cible.determineVie(vieguerrier); } void magicien:: affichemagicien() { string sorti [3]={"verbal","baguette","potion"}; cout << "nom " << nom << " sortilege " << sorti[sortilege-1] << " vie " << vie << endl<< endl; }
void magicien::getnom() { cout << nom; }
int magicien::getsor() { return sortilege; }
// ************************************************ int main() { srand(time(NULL)); int nbrGuerrier(0), nbrMagicien(0),nb(1), rep=0,compt=0,compt1=0, choixMagicien(0), choixGuerrier(0); bool vie; char choix; string sorti [3]={"verbal","baguette","potion"};
system ("pause"); system ("cls"); cout << "combien de magicien voulez-vous entrez ? "; cin>> nbrMagicien; magicien magie[nbrMagicien]; system ("pause"); system ("cls");
Guerrier a besoin de connaître magicien, mais magicien a besoin de connaître guerrier. Tu a crée une dépendance en boucle, cela peut se résoudre par une déclaration anticipée.
Maintenant, coté conception, il y a un gros soucis. En effet, si tu ajoute des classe de personnage (voleur, ou clerc par exemple), que devras tu faire ? Ajouter des surcharge de la fonction membre attaqueXXX dans les autres classes pour prendre en compte les nouveau venu ? Cela ne devrais pas être le cas.
Ton code comporte également plein de trucs déplaisant, je laisse mes co-intervenants te tapper sur les doigts.
C'est exactement le cas où l'orienté objet a ses limites. L'héritage est une contrainte forte qui signifie EST-UN. Évidemment on pourrait dire qu'un Magicien, Guerrier, Barbare SONT des objets de type « Personnage ». Mais alors sur le principe de Liskov, il devrait n'y avoir aucun comportement différent selon le remplacement d'un de ces objets.
Dans ce cas, si on peut faire une solution simple, il faudrait une fonction virtuelle “attack” qui prend un autre objet de type Personange et effectue des actions différente selon la classe.
Dans tous les cas, n'importe quel objet ne devrait pas savoir qui il attaque ou par qui il se fait attaquer.
git is great because Linus did it, mercurial is better because he didn't.
Inclure un fichier .h
× 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.