Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3010 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Problème objet/classe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème objet/classe

n°1833400
Akumetsu
Posté le 03-01-2009 à 15:09:08  profilanswer
 

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
mood
Publicité
Posté le 03-01-2009 à 15:09:08  profilanswer
 

n°1833410
alexandre_​j
Posté le 03-01-2009 à 15:33:19  profilanswer
 

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
n°1833412
Akumetsu
Posté le 03-01-2009 à 15:53:17  profilanswer
 

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 ?

n°1833418
alexandre_​j
Posté le 03-01-2009 à 17:01:19  profilanswer
 

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.

n°1833419
alexandre_​j
Posté le 03-01-2009 à 17:03:10  profilanswer
 

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
n°1833423
Akumetsu
Posté le 03-01-2009 à 17:31:44  profilanswer
 

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.

n°1833476
Akumetsu
Posté le 03-01-2009 à 21:29:49  profilanswer
 

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
n°1833500
alexandre_​j
Posté le 04-01-2009 à 00:14:23  profilanswer
 

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

n°1833510
Akumetsu
Posté le 04-01-2009 à 01:05:11  profilanswer
 

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
n°1833525
Joel F
Real men use unique_ptr
Posté le 04-01-2009 à 09:48:56  profilanswer
 

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
mood
Publicité
Posté le 04-01-2009 à 09:48:56  profilanswer
 

n°1834237
Akumetsu
Posté le 05-01-2009 à 20:08:07  profilanswer
 

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

n°1834275
Joel F
Real men use unique_ptr
Posté le 05-01-2009 à 21:53:07  profilanswer
 

* 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
n°1834308
Akumetsu
Posté le 05-01-2009 à 23:07:35  profilanswer
 

*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
n°1834401
Joel F
Real men use unique_ptr
Posté le 06-01-2009 à 11:14:17  profilanswer
 


 
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.

n°1834677
Akumetsu
Posté le 06-01-2009 à 18:35:47  profilanswer
 

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.

n°1834718
Joel F
Real men use unique_ptr
Posté le 06-01-2009 à 19:38:22  profilanswer
 

non, un tableau 1D suffit. Pourquoi ?

n°1834743
Akumetsu
Posté le 06-01-2009 à 20:03:38  profilanswer
 

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
n°1834818
Joel F
Real men use unique_ptr
Posté le 06-01-2009 à 21:54:38  profilanswer
 

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.

n°1834868
Akumetsu
Posté le 06-01-2009 à 23:26:46  profilanswer
 

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.

n°1835282
Akumetsu
Posté le 07-01-2009 à 19:59:14  profilanswer
 

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.

n°1835297
Joel F
Real men use unique_ptr
Posté le 07-01-2009 à 20:18:04  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Problème objet/classe

 

Sujets relatifs
Problème algorithme de DijkstraProblème d'attribution de valeur à une structure
[C - Gros débutant] Probleme de variable ...probleme image 4d, PHP, SQL
impossible de rejouer....probleme de scanf :(Problème avec condition dans script batch
petit probleme avec un script cssprobleme sur formulaire
Problème de connexion avec SQL serveur 2005[résolu] Probleme d'appel d'un objet dans ma classe
Plus de sujets relatifs à : Problème objet/classe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR