Problème objet/classe

Problème objet/classe - C++ - Programmation

Marsh Posté le 03-01-2009 à 15:09:08    

Bonjour, j'ai quelques soucis à propos d'un programme que je suis en train de faire (pas compliqué du tout, je ne suis encore que débutant) et j'ai encore quelques soucis avec les objets/classes, c'est donc pour cette raison que je fais appel à vous. Mon programme s'apparente à un Pokemon-like avec des personnages et des attaques, bon pour l'instant il n'y a rien de très emballant mais je m'occuperai du reste lorsque les erreurs rencontrées seront corrigés.
 
Tout d'abord voici mon .h (si celui ci n'est pas à la norme, des petites erreurs, si les attributs sont mal utilisés ou si vous avez des conseils, n'hésitez pas à m'en faire part) :
 
FAUX (effacé pour ne pas encombrer la page).
 
 
Et voici les quelques messages d'erreurs :
 
43 RPKeik.h new types may not be defined in a return type
 
43 RPKeik.h two or more data types in declaration of `ChoixJoueur1'
 
43 RPKeik.h prototype for `RPKeik RPKeik::ChoixJoueur1()' does not match any in class `RPKeik'  
 
 
Je ne vois pas trop où est le problème étant donné qu'il n'y a pas de return pour le premier message.  
 
Merci d'avance.


Message édité par Akumetsu le 05-01-2009 à 23:18:02
Reply

Marsh Posté le 03-01-2009 à 15:09:08   

Reply

Marsh Posté le 03-01-2009 à 15:33:19    

Ta classe doit se terminer par un ;
 

Code :
  1. class test
  2. {
  3. };

Message cité 1 fois
Message édité par alexandre_j le 03-01-2009 à 15:33:40
Reply

Marsh Posté le 03-01-2009 à 15:53:17    

alexandre_j a écrit :

Ta classe doit se terminer par un ;
 

Code :
  1. class test
  2. {
  3. };



 
Quel idiot je fais :pfff: ... vivement que ça devienne un automatisme. Merci.
 
Les erreurs, quand il n'y en a plus, il y en a encore.  
 
 
189 C:\Users\Keikoku\Desktop\Programmation\Projet BTS 2008\RPKeik\RPKeik.h no match for 'operator>>' in 'std::cin >> ((RPKeik*)this)->RPKeik::AttaqueJoueur1'  
 
 
On ne peut pas utiliser de cin pour un attribut ?

Reply

Marsh Posté le 03-01-2009 à 17:01:19    

Je ne sais pas. Perso je passerais par une variable intermédiaire qui ne soit pas un int, car si l'utilisateur rentre autre chose qu'un int, ça plante. Je passerais par un autre type (char) et je testerais si c'est un int et le balancerais dans le switch. Maintenant vu les experts qu'il y a ici, j'ai bien envie de savoir qu'elle solution adopter face à ce genre de problème.

Reply

Marsh Posté le 03-01-2009 à 17:03:10    

A regarder le code de plus prêt... AttaqueJoueur1 est une fonction !

Message cité 1 fois
Message édité par alexandre_j le 03-01-2009 à 17:03:50
Reply

Marsh Posté le 03-01-2009 à 17:31:44    

alexandre_j a écrit :

A regarder le code de plus prêt... AttaqueJoueur1 est une fonction !


 
Exact, j'ai viré les parenthèses et ça va mieux. J'ai honte de faire des erreurs comme celles-ci. Encore merci.

Reply

Marsh Posté le 03-01-2009 à 21:29:49    

Encore besoin d'aide... en espérant cette fois ci ne pas avoir fait d'erreurs de débutant.

 

 [Linker error] undefined reference to `RPKeik::RPKeik()'
  [Linker error] undefined reference to `RPKeik::~RPKeik()'

 

Je ne vois absolument pas ce qu'il faut faire, ce n'est pas faute d'avoir mis :

 

RPKeik::RPKeik()
{
}

 

RPKeik::~RPKeik()
{
}

 

Comme dit sur ce lien :
http://www.keil.com/support/docs/3136.htm


Message édité par Akumetsu le 03-01-2009 à 22:41:40
Reply

Marsh Posté le 04-01-2009 à 00:14:23    

Est-ce que tu peux remettre ton code mis à jour ?

Reply

Marsh Posté le 04-01-2009 à 01:05:11    

alexandre_j a écrit :

Est-ce que tu peux remettre ton code mis à jour ?

 

J'ai voulu faire de la POO (bon par contre je ne suis pas sur du résultat) mais j'ai toujours l'ancienne version mise à jour au cas où.

 
Code :
  1. #ifndef RPKEIK_H
  2. #define RPKEIK_H
  3. #include <cstdlib>
  4. #include <iostream>
  5. #include <string>
  6. using namespace std ;
  7. class RPKeik
  8. {
  9.     public :
  10.     RPKeik() ;
  11.     ~RPKeik() ;
  12.     void ChoixJoueur1() ;
  13.     void ChoixJoueur2() ;
  14.     void Combat() ;
  15.    
  16.     private :
  17.     int Joueur1 ;
  18.     int Joueur2 ;
  19.    
  20.     string NomJoueur1 ;
  21.     int VieJoueur1 ;
  22.     int AttaqueJoueur1 ;
  23.     string NomAttaque1Joueur1 ;
  24.     int Attaque1Joueur1 ;
  25.     string NomAttaque2Joueur1 ;
  26.     int Attaque2Joueur1 ;
  27.    
  28.     string NomJoueur2 ;
  29.     int VieJoueur2 ;
  30.     int AttaqueJoueur2 ;
  31.     string NomAttaque1Joueur2 ;
  32.     int Attaque1Joueur2 ;
  33.     string NomAttaque2Joueur2 ;
  34.     int Attaque2Joueur2 ;
  35. } ;
  36. RPKeik::RPKeik()
  37. {
  38.     RPKeik Joueur12 ;
  39.     system("cls" ) ;
  40.     cout << "Joueur 1 choisissez un personnage :" << endl << "1.Sorel" << endl << "2.Pikachu" << endl << "3.Vegeta" << endl << "4.Mario" << endl << "5.Ryu" << endl << "Captain Falcon" << endl << "7.Dark Vador" << endl << "8.Windows" << endl << "9.Joker" << endl << "10.Leonidas" << endl ;
  41.     Joueur12.ChoixJoueur1() ;
  42.     system("cls" ) ;
  43.     cout << "Joueur 2 choisissez un personnage :" << endl << "1.Sorel" << endl << "2.Pikachu" << endl << "3.Vegeta" << endl << "4.Mario" << endl << "5.Ryu" << endl << "Captain Falcon" << endl << "7.Dark Vador" << endl << "8.Windows" << endl << "9.Joker" << endl << "10.Leonidas" << endl ;
  44.     Joueur12.ChoixJoueur2() ;
  45.     system("cls" ) ;
  46.     Joueur12.Combat() ;
  47.     system("PAUSE>nul" );
  48. }
  49. RPKeik::~RPKeik()
  50. {
  51. }
  52. void RPKeik::ChoixJoueur1()
  53. {
  54.     cin >> Joueur1 ;
  55.     switch (Joueur1)
  56.     {
  57.            case 1 : this->NomJoueur1="Sorel" ;
  58.                     this->NomAttaque1Joueur1="1, 2, 3 Sorel" ;
  59.                     this->Attaque1Joueur1=50 ;
  60.                     this->NomAttaque2Joueur1="Sorel & Hardy" ;
  61.                     this->Attaque2Joueur1=60 ;
  62.            break ;
  63.            case 2 : this->NomJoueur1="Pikachu" ;
  64.                     this->NomAttaque1Joueur1="Tonnerre" ;
  65.                     this->Attaque1Joueur1=50 ;
  66.                     this->NomAttaque2Joueur1="Vive-Attaque" ;
  67.                     this->Attaque2Joueur1=60 ;
  68.            break ;
  69.            case 3 : this->NomJoueur1="Vegeta" ;
  70.                     this->NomAttaque1Joueur1="Final Flash" ;
  71.                     this->Attaque1Joueur1=50 ;
  72.                     this->NomAttaque2Joueur1="It's over 9000 !!!" ;
  73.                     this->Attaque2Joueur1=60 ;
  74.            break ;
  75.            case 4 : this->NomJoueur1="Mario" ;
  76.                     this->NomAttaque1Joueur1="Saut" ;
  77.                     this->Attaque1Joueur1=50 ;
  78.                     this->NomAttaque2Joueur1="Marteau" ;
  79.                     this->Attaque2Joueur1=60 ;
  80.            break ;
  81.            case 5 : this->NomJoueur1="Ryu" ;
  82.                     this->NomAttaque1Joueur1="Hado Ken" ;
  83.                     this->Attaque1Joueur1=50 ;
  84.                     this->NomAttaque2Joueur1="Sho Ryu Ken" ;
  85.                     this->Attaque2Joueur1=60 ;
  86.            break ;
  87.            case 6 : this->NomJoueur1="Captain Falcon" ;
  88.                     this->NomAttaque1Joueur1="Falcon Punch" ;
  89.                     this->Attaque1Joueur1=50 ;
  90.                     this->NomAttaque2Joueur1="Falcon Kick" ;
  91.                     this->Attaque2Joueur1=60 ;
  92.            break ;
  93.            case 7 : this->NomJoueur1="Dark_Vador" ;
  94.                     this->NomAttaque1Joueur1="Je suis ton père" ;
  95.                     this->Attaque1Joueur1=50 ;
  96.                     this->NomAttaque2Joueur1="Sabre Laser" ;
  97.                     this->Attaque2Joueur1=60 ;
  98.            break ;
  99.            case 8 : this->NomJoueur1="Windows" ;
  100.                     this->NomAttaque1Joueur1="BSOD" ;
  101.                     this->Attaque1Joueur1=50 ;
  102.                     this->NomAttaque2Joueur1="Bug" ;
  103.                     this->Attaque2Joueur1=60 ;
  104.            break ;
  105.            case 9 : this->NomJoueur1="Joker" ;
  106.                     this->NomAttaque1Joueur1="Pencil Trick" ;
  107.                     this->Attaque1Joueur1=50 ;
  108.                     this->NomAttaque2Joueur1="Why so serious ?" ;
  109.                     this->Attaque2Joueur1=60 ;
  110.            break ;
  111.            case 10 : this->NomJoueur1="Leonidas" ;
  112.                     this->NomAttaque1Joueur1="This is Sparta !" ;
  113.                     this->Attaque1Joueur1=50 ;
  114.                     this->NomAttaque2Joueur1="We dine on hell !" ;
  115.                     this->Attaque2Joueur1=60 ;
  116.            break ;
  117.            default : cout << "Veuillez selectionner un personnage existant !" << endl ;
  118.            break ;
  119.     }
  120. void RPKeik::ChoixJoueur2()
  121. {
  122.     cin >> Joueur2 ;
  123.     switch (Joueur2)
  124.     {
  125.            case 1 : this->NomJoueur2="Sorel" ;
  126.                     this->NomAttaque1Joueur2="1, 2, 3 Sorel" ;
  127.                     this->Attaque1Joueur2=50 ;
  128.                     this->NomAttaque2Joueur2="Sorel & Hardy" ;
  129.                     this->Attaque2Joueur2=60 ;
  130.            break ;
  131.            case 2 : this->NomJoueur2="Pikachu" ;
  132.                     this->NomAttaque1Joueur2="Tonnerre" ;
  133.                     this->Attaque1Joueur2=50 ;
  134.                     this->NomAttaque2Joueur2="Vive-Attaque" ;
  135.                     this->Attaque2Joueur2=60 ;
  136.            break ;
  137.            case 3 : this->NomJoueur2="Vegeta" ;
  138.                     this->NomAttaque1Joueur2="Final Flash" ;
  139.                     this->Attaque1Joueur2=50 ;
  140.                     this->NomAttaque2Joueur2="It's over 9000 !!!" ;
  141.                     this->Attaque2Joueur2=60 ;
  142.            break ;
  143.            case 4 : this->NomJoueur2="Mario" ;
  144.                     this->NomAttaque1Joueur2="Saut" ;
  145.                     this->Attaque1Joueur2=50 ;
  146.                     this->NomAttaque2Joueur2="Marteau" ;
  147.                     this->Attaque2Joueur2=60 ;
  148.            break ;
  149.            case 5 : this->NomJoueur2="Ryu" ;
  150.                     this->NomAttaque1Joueur2="Hado Ken" ;
  151.                     this->Attaque1Joueur2=50 ;
  152.                     this->NomAttaque2Joueur2="Sho Ryu Ken" ;
  153.                     this->Attaque2Joueur2=60 ;
  154.            break ;
  155.            case 6 : this->NomJoueur2="Captain Falcon" ;
  156.                     this->NomAttaque1Joueur1="Falcon Punch" ;
  157.                     this->Attaque1Joueur2=50 ;
  158.                     this->NomAttaque2Joueur2="Falcon Kick" ;
  159.                     this->Attaque2Joueur2=60 ;
  160.            break ;
  161.            case 7 : this->NomJoueur2="Dark_Vador" ;
  162.                     this->NomAttaque1Joueur2="Je suis ton père" ;
  163.                     this->Attaque1Joueur2=50 ;
  164.                     this->NomAttaque2Joueur2="Sabre Laser" ;
  165.                     this->Attaque2Joueur2=60 ;
  166.            break ;
  167.            case 8 : this->NomJoueur2="Windows" ;
  168.                     this->NomAttaque1Joueur2="BSOD" ;
  169.                     this->Attaque1Joueur2=50 ;
  170.                     this->NomAttaque2Joueur2="Bug" ;
  171.                     this->Attaque2Joueur2=60 ;
  172.            break ;
  173.            case 9 : this->NomJoueur2="Joker" ;
  174.                     this->NomAttaque1Joueur2="Pencil Trick" ;
  175.                     this->Attaque1Joueur2=50 ;
  176.                     this->NomAttaque2Joueur2="Why so serious ?" ;
  177.                     this->Attaque2Joueur2=60 ;
  178.            break ;
  179.            case 10 : this->NomJoueur2="Leonidas" ;
  180.                      this->NomAttaque1Joueur2="This is Sparta !" ;
  181.                      this->Attaque1Joueur2=50 ;
  182.                      this->NomAttaque2Joueur2="We dine on hell !" ;
  183.                      this->Attaque2Joueur2=60 ;
  184.            break ;
  185.            default : cout << "Veuillez selectionner un personnage existant !" << endl ;
  186.            break ;
  187.     }
  188. }
  189. void RPKeik::Combat()
  190. {
  191.      do
  192.      {
  193.          cout << "Joueur1 : " << NomJoueur1 << "choisissez une attaque : " << endl << "1." << NomAttaque1Joueur1 << endl << "2." << NomAttaque2Joueur1 << endl ;
  194.          cin >> this->AttaqueJoueur1 ;
  195.          switch (this->AttaqueJoueur1)
  196.          {
  197.                 case 1 : cout << NomJoueur1 << " lance " << NomAttaque1Joueur1 << endl ;
  198.                          this->VieJoueur2 = this->VieJoueur2 - this->Attaque1Joueur1 ;                   
  199.                 break ;
  200.                 case 2 : cout << NomJoueur1 << " lance " << NomAttaque2Joueur1 << endl ;
  201.                          this->VieJoueur2 = this->VieJoueur2 - this->Attaque2Joueur1 ;
  202.                 break ;
  203.          }
  204.          cout << NomJoueur2 << " a " << this->VieJoueur2 << " de vie " << endl << endl ;
  205.        
  206.          if (this->VieJoueur2 != 0)
  207.          {
  208.              cout << "Joueur2 : " << NomJoueur2 << "choisissez une attaque : " << endl << "1." << NomAttaque1Joueur2 << endl << "2." << NomAttaque2Joueur2 << endl ;
  209.              cin >> this->AttaqueJoueur2 ;
  210.              switch (this->AttaqueJoueur2)
  211.              {
  212.                     case 1 : cout << NomJoueur2 << " lance " << NomAttaque1Joueur2 << endl ;
  213.                              this->VieJoueur1 = this->VieJoueur1 - this->Attaque1Joueur2 ;                     
  214.                     break ;
  215.                     case 2 : cout << NomJoueur2 << " lance " << NomAttaque2Joueur2 << endl ;
  216.                              this->VieJoueur1 = this->VieJoueur1 - this->Attaque2Joueur2 ;
  217.                     break ;
  218.              }
  219.              cout << NomJoueur1 << " a " << this->VieJoueur1 << " de vie " << endl ;
  220.          }
  221.      }
  222.      while (!(this->VieJoueur1 == 0 || this->VieJoueur2 == 0)) ;
  223.    
  224.      if ( this->VieJoueur2 <= 0 )
  225.      {
  226.           cout << "Joueur 1 a gagné !" << endl ;
  227.      }
  228.      else
  229.      {
  230.          cout << "Joueur 2 a gagné !" << endl ;
  231.      }
  232. }
  233. #endif
 

Le constructeur m'a pas l'air bon du tout (ou alors les objets) car quand je compile tout marche correctement, par contre à l'exécution ça plante (j'ai mis un system PAUSE au début du constructeur et ça plante quand même).


Message édité par Akumetsu le 04-01-2009 à 01:05:37
Reply

Marsh Posté le 04-01-2009 à 09:48:56    

revois les abses avec un cours propre. La tu fait n'importe quoi ...

 

ligne 43 : RPKeik Joueur12 ;

 

pourquoi instancie tu un RPKeik dans le constructeur de RPKeik ?
L'erreur à l'execution est certaienemnt une stack overflow car l'instanciation rappelles le constructeur etc ...

 

Ensuite, tu melange code des entités, interface utilisateur et gestion du flux du programme.
La, y a genre 4-5 classes à faire : personnage, joueur, partie, etc ...

 

Des liens :

 

http://cpp.developpez.com/cours/cppavance/
http://bruce-eckel.developpez.com/ [...] icpp2vol1/


Message édité par Joel F le 04-01-2009 à 09:52:36
Reply

Marsh Posté le 04-01-2009 à 09:48:56   

Reply

Marsh Posté le 05-01-2009 à 20:08:07    

Merci pour les liens, ils sont très complet et j'ai enfin (je l'espère) saisis l'utilité des classes et des objets. J'ai donc fait la class Personnage comme tu le préconisais :
 
 

Code :
  1. #ifndef PERSONNAGE_H
  2. #define PERSONNAGE_H
  3. #include <string>
  4. using namespace std ;
  5. class Personnage
  6. {
  7.     public :
  8.          
  9.     Personnage() ;
  10.     ~Personnage() ;
  11.     void Sorel() ;
  12.     void Pikachu() ;
  13.     void Vegeta() ;
  14.     void Mario() ;
  15.     void Ryu () ;
  16.     void CaptainFalcon() ;
  17.     void DarkVador() ;
  18.     void Windows() ;
  19.     void Joker() ;
  20.     void Leonidas() ;
  21.     void PersoCree() ;
  22.    
  23.     private :           
  24.            
  25.     string Nom ;
  26.     string NomAttaque1 ;
  27.     int Attaque1 ;
  28.     int EnergieAttaque1 ;
  29.     string NomAttaque2 ;
  30.     int Attaque2 ;
  31.     int EnergieAttaque2 ;
  32. } ;
  33. Personnage Joueur1 ;
  34. Personnage Joueur2 ;
  35. void Personnage::Sorel()
  36. {
  37.      this->Nom="Sorel" ;
  38.      this->NomAttaque1="1, 2, 3 Sorel" ;
  39.      this->Attaque1=25 ;
  40.      this->EnergieAttaque1=45 ;
  41.      this->NomAttaque2="Sorel & Hardy" ;
  42.      this->Attaque2=60 ;
  43.      this->EnergieAttaque2=70 ;
  44. }
  45. void Personnage::Pikachu()
  46. {
  47.      this->Nom="Pikachu" ;
  48.      this->NomAttaque1="Tonnerre" ;
  49.      this->Attaque1=50 ;
  50.      this->EnergieAttaque1=60 ;
  51.      this->NomAttaque2="Vive-Attaque" ;
  52.      this->Attaque2=15 ;
  53.      this->EnergieAttaque2=20 ;
  54. }
  55. void Personnage::Vegeta()
  56. {
  57.      this->Nom="Vegeta" ;
  58.      this->NomAttaque1="Final Flash" ;
  59.      this->Attaque1=30 ;
  60.      this->EnergieAttaque1=50 ;
  61.      this->NomAttaque2="It's over 9000 !!!" ;
  62.      this->Attaque2=80 ;
  63.      this->EnergieAttaque2=100 ;
  64. }
  65. void Personnage::Mario()
  66. {
  67.      this->Nom="Mario" ;
  68.      this->NomAttaque1="Saut" ;
  69.      this->Attaque1=35 ;
  70.      this->EnergieAttaque1=55 ;
  71.      this->NomAttaque2="Marteau" ;
  72.      this->Attaque2=60 ;
  73.      this->EnergieAttaque2=70 ;
  74. }
  75. void Personnage::Ryu()
  76. {
  77.      this->Nom="Ryu" ;
  78.      this->NomAttaque1="Hado Ken" ;
  79.      this->Attaque1=15 ;
  80.      this->EnergieAttaque1=20 ;
  81.      this->NomAttaque2="Sho Ryu Ken" ;
  82.      this->Attaque2=30 ;
  83.      this->EnergieAttaque2=50 ;
  84. }
  85. void Personnage::CaptainFalcon()
  86. {
  87.      this->Nom="Captain Falcon" ;
  88.      this->NomAttaque1="Falcon Punch" ;
  89.      this->Attaque1=80 ;
  90.      this->EnergieAttaque1=100 ;
  91.      this->NomAttaque2="Falcon Kick" ;
  92.      this->Attaque2=25 ;
  93.      this->EnergieAttaque2=45 ;
  94. }
  95. void Personnage::DarkVador()
  96. {
  97.      this->Nom="Dark Vador" ;
  98.      this->NomAttaque1="Je suis ton père" ;
  99.      this->Attaque1=10 ;
  100.      this->EnergieAttaque1=15 ;
  101.      this->NomAttaque2="Sabre Laser" ;
  102.      this->Attaque2=30 ;
  103.      this->EnergieAttaque2=50 ;
  104. }
  105. void Personnage::Windows()
  106. {
  107.      this->Nom="Windows" ;
  108.      this->NomAttaque1="BSOD" ;
  109.      this->Attaque1=50 ;
  110.      this->EnergieAttaque1=60 ;
  111.      this->NomAttaque2="Bug" ;
  112.      this->Attaque2=50 ;
  113.      this->EnergieAttaque2=60 ;
  114. }
  115. void Personnage::Joker()
  116. {
  117.      this->Nom="Joker" ;
  118.      this->NomAttaque1="Pencil Trick" ;
  119.      this->Attaque1=80 ;
  120.      this->EnergieAttaque1=100 ;
  121.      this->NomAttaque2="Why so serious ?" ;
  122.      this->Attaque2=20 ;
  123.      this->EnergieAttaque2=30 ;
  124. }
  125. void Personnage::Leonidas()
  126. {
  127.      this->Nom="Leonidas" ;
  128.      this->NomAttaque1="This is Sparta !" ;
  129.      this->Attaque1=50 ;
  130.      this->EnergieAttaque1=60 ;
  131.      this->NomAttaque2="We dine on hell !" ;
  132.      this->Attaque2=10 ;
  133.      this->EnergieAttaque2=15 ;
  134. }
  135. #endif


 
Je pense que jusque là, tout est à peu près bon (j'espère que je ne mélange plus rien cette fois :) ).
 
Malheureusement j'ai la droit aux messages d'erreur suivant :
 
  [Linker error] undefined reference to `Personnage::Personnage()'  
  [Linker error] undefined reference to `Personnage::Personnage()'  
  [Linker error] undefined reference to `Personnage::~Personnage()'  
  [Linker error] undefined reference to `Personnage::~Personnage()'  
  ld returned 1 exit status  
 
 
J'ai donc rajouté, après quelques recherches, ces lignes :
 
Personnage::Personnage()
{
}
 
 et
 
Personnage::~Personnage()
{
}
 
sans grand succès, malheureusement.
 
Peut être faut-il implémenter

Reply

Marsh Posté le 05-01-2009 à 21:53:07    

* Vegetta etc devrait etre des INSTANCES de personnage :o
* Pas de code dnas un .h mais dans un .cpp
* Pas de pollution de namespace ne ouvrant std dnas un .h


Message édité par Joel F le 05-01-2009 à 21:54:09
Reply

Marsh Posté le 05-01-2009 à 23:07:35    

*Vegeta etc... en instance (objet si j'ai bien compris) ? En fait, je dois écrire dans le Personnage.cpp :

Code :
  1. Vegeta.Attaque1 = 30 ;
  2. Vegeta.EnergieAttaque1=50 ;
  3. etc...
 

Puis dans ma class Joueur je ferai des méthodes du style :

Code :
  1. void Joueur::Vegeta
  2. {
  3.     Attaque1 = Vegeta.Attaque1 ;
  4.     EnergieAttaque1 = Vegeta.EnergieAttaque1 ;
  5. }
 

Cette explication me parait assez tordu (je fais toujours compliqué), j'en conclus qu'elle est entièrement fausse. :/

 

*Effectivement, les méthodes se mettent dans un cpp, je viens de corriger.

 

*Pour le namespace, j'ai mis ça à cause du string. Mais je viens de remplacer par std::string pour virer le namespace.

Message cité 1 fois
Message édité par Akumetsu le 05-01-2009 à 23:08:18
Reply

Marsh Posté le 06-01-2009 à 11:14:17    


 
Revois tes bases.
 
Ta classe personnage devrait avoir un constructeur non trivial qui permet de construire un personnage ) partir de ces caractéristiques :
 

Code :
  1. Personnage::Personnage(std::string const& nom,std::string const& na1, int a1, int ea1,std::string const& na2, int a2, int ea2)
  2.   : Nom(nom),NomAttaque1(a1),Attaque1(a1),EnergieAttaque1(ea1),NomAttaque2(a2),Attaque2(a2),EnergieAttaque2(ea2)
  3. {}


 
Ensuite, tu crée un personnage pré-défini ainsi :
 

Code :
  1. Personnage vegeta("Vegeta", "Final Flash",30,50,"It's over 9000 !!!",80,100);


 
Le mieux serait neanmoins de les ranger dans un tableau de personnage, de les remplir au début et d'associser à chacun un index.
 

Code :
  1. Personnage persos[] = { {"bob","truc",1,2,"chose",3,50}
  2.                                 , {"Mario","Saut",10,20,"Fleur",50,20}
  3. // etc ...
  4.                                };


 
Le choix du joueur est alors directement utilisé pr accéder au peros n° X.
 
C'est bancal et très moche, mais la solution propre te dépasse je pense. Tu es encore en train d'écrire des trucs sans savoir ce que ça veut dire.
Reprends les cours de 0 et valide morceaux par morceaux ton code.

Reply

Marsh Posté le 06-01-2009 à 18:35:47    

Ah oui, j'avais omis l'utilisation des parenthèses...
 
Pour la deuxième méthode, ne faut-il pas un tableau à 2 dimensions par hasard ?  
 
Et encore une fois merci.

Reply

Marsh Posté le 06-01-2009 à 19:38:22    

non, un tableau 1D suffit. Pourquoi ?

Reply

Marsh Posté le 06-01-2009 à 20:03:38    

Car tu mets plusieurs accolades dans une accolade : { {} {} }  (Jamais vu ça)
Je pensais que c'était uniquement pour les tableaux 2D (D'ailleurs sur ce site il utilise cette méthode seulement pour le tableau 2D) où chaque accolade correspond à une colonne.

 

Mais en continuant de chercher ( http://forum.hardware.fr/hfr/Progr [...] 5716_1.htm ) j'ai vu que ça marchait de cette façon :

Code :
  1. Toto Tab[] = { Toto(1, 2), Toto(2, 3) }


Donc pour mon cas, cela donnerait ceci (tout du moins si je suis le message de BifaceMcLeOD :

Code :
  1. Personnage persos[] = { Personnage("bob", "truc", 1, 2...), Personnage("Mario"...) }


Bien sur ta manière de faire est bien plus courte car pas besoin de réécrire le nom de la classe (le constructeur donc) à chaque fois.

 

J'espère ne pas avoir dit trop de bêtises (pour une fois).


Message édité par Akumetsu le 06-01-2009 à 21:03:48
Reply

Marsh Posté le 06-01-2009 à 21:54:38    

A posteriori ca marche pas avec {}, car ta classe Personnage n'est pas uen classe Plain Old Data. Reprends la syntaxe avec le nom de la classe.

Reply

Marsh Posté le 06-01-2009 à 23:26:46    

Ah d'accord, c'est donc de là que venait l'erreur :
 brace-enclosed initializer used to initialize `Personnage'  
J'étais justement en train de chercher une solution. Après modification, il n'y a plus d'erreur hormis un LinkerError pour le destructeur.

Reply

Marsh Posté le 07-01-2009 à 19:59:14    

Afin de faire en sorte que le joueur1 et le joueur2 ait des nom, a1 etc... distinctes, je ne vois pas du tout que faire car c'est l'objet Joueur1 qui "utilise" l'objet oPersos.

Reply

Marsh Posté le 07-01-2009 à 20:18:04    

le joueur c'est pas le personnage ... Un joueur "utilise" un personnage.donc ta classe joueur contient une instance de personnage.
 
Revois les principes de modélisation objet de base v_v

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed