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

  FORUM HardWare.fr
  Programmation
  C++

  Tableau de structure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tableau de structure

n°1299064
XSterna
Posté le 04-02-2006 à 15:53:55  profilanswer
 

Bonjour,
 
J'ai un probleme assez etrange (comme tous les pb d'ailleurs) avec un tableau de structure en C++.
 
Voila, j'ai une classe Model comme suit :
 
Model.h

Code :
  1. class Model{
  2. public:
  3.   Model();
  4.   ~Model(){};
  5. private
  6.   struct Case{
  7.     int numerocase;
  8.     bool couleur;
  9.   };
  10.   Case damier[100];
  11.   void initdamier();
  12. };


 
Model.cpp

Code :
  1. #include "Model.h"
  2. using namespace std;
  3. Model::Model(){
  4.   initdamier();
  5. }
  6. void Model::initdamier(){
  7.   int i;
  8.   bool _couleur = false;
  9.   for(i = 0 ; i < 100; i++){
  10.   damier[i].numerocase = i;
  11.   damier[i].couleur = _couleur;
  12.   }
  13. }


 
Avec un tel code, la compilation se déroule bien, mais j'obtient un Instruction illégale quand je lance l'execution.
 
Ce qui est etrange c'est que lorsque que je fais un tableau de 50 struct, ca marche ...

mood
Publicité
Posté le 04-02-2006 à 15:53:55  profilanswer
 

n°1299069
Taz
bisounours-codeur
Posté le 04-02-2006 à 16:02:14  profilanswer
 

utilise std::vector<Case> plutôt qu'un tableau.

n°1299088
XSterna
Posté le 04-02-2006 à 17:14:52  profilanswer
 

J'avais effectivement pas pensé a vector. Cela dit j'ai du l'employer 1 fois dans ma vie et pas pour des structures
 
J'ai donc mis la ligne suivante :
 

Code :
  1. vector<Case> damier(100);


 
La premiere question qui me vient est de savoir si l'on peut assigner une taille.
Ensuite, j'obtient une erreur de compilation :
 
Model.h:30: error: 'vector' is used as a type, but is not defined as a type.
 
Enfin, comment assigner des valeurs ?
damier[i].numerocase = i; ??

n°1299091
skelter
Posté le 04-02-2006 à 17:30:36  profilanswer
 

#include <vector>
 
et std::vector<Case> damier(100);
 
tu peux l'utiliser comme un tableau classique (accés aux éléments avec l'opérateur []) et la méthode size() retourne le nombre d'éléments.
http://www.sgi.com/tech/stl/Vector.html

n°1299094
XSterna
Posté le 04-02-2006 à 17:41:22  profilanswer
 

Ca avance, ca avance ^^
 
J'obtient maintenant d'autres erreurs :
Model.h:29: error: invalid data member initialization
Model.h:29: error: (use `=' to initialize static data members)

 
Pour info je remets la totalite de mon fichier d'en tête
 

Code :
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <easywindow.h>
  4. #include <vector>
  5. #ifndef Model_h
  6. #define Model_h
  7. class Model{
  8. public:
  9.   Model();
  10.   ~Model(){};
  11. private
  12.   struct Case{
  13.     int numerocase;
  14.     bool couleur;
  15.   };
  16.   std::vector<Case> damier(100);
  17.   void initdamier();
  18. };
  19. #endif


 
D'ailleurs en passant, merci pour le lien :)

n°1299097
skelter
Posté le 04-02-2006 à 17:48:11  profilanswer
 

ca l'air compilable, mais il n'y a que 27 ligne, elle est ou la ligne 29 ?
 
et pourquoi tu as besoin de stdio.h ? (d'ailleur faudrais plutot inclure cstdio)


Message édité par skelter le 04-02-2006 à 17:48:41
n°1299100
XSterna
Posté le 04-02-2006 à 17:53:23  profilanswer
 

Effectivement c'est un peu bête de faire une copie partielle qd on a des references a des lignes ^^. J'suis pas habitué aux forums :p
 
Voila donc la source exacte

Code :
  1. /*---------------------------------------------------------------------------*/
  2. /*                                                                           */
  3. /*                                 Model.h                                   */
  4. /*                                                                           */
  5. /* Auteur: XSterna                                                           */
  6. /* Date  : 08/12/2005 11:24                                                  */
  7. /*---------------------------------------------------------------------------*/
  8. #include <stdio.h>
  9. #include <iostream>
  10. #include <easywindow.h>
  11. #include <vector>
  12. #ifndef Model_h
  13. #define Model_h
  14. class Model{
  15. public:
  16.   Model();
  17.   ~Model(){};
  18. private
  19.   struct Case{
  20.     int numerocase;
  21.     bool couleur;
  22.   };
  23.   std::vector<Case> damier(100);
  24.   void initdamier();
  25. };
  26. #endif


 
L'erreur de compilation renvoie donc à la ligne concernant le "vector<Case>"
 
Pour les libs, je fais pas trop gaffe en général a mes inclusions, j'ai pour habitude (surement mauvaise) de faire des copiés/collés à la pelle pour les debut de fichier d'en tete.


Message édité par XSterna le 04-02-2006 à 17:54:15
n°1299103
Taz
bisounours-codeur
Posté le 04-02-2006 à 18:01:55  profilanswer
 

le .h c'est pour déclarer, pas pour initialiser.
 
Dans ton .cpp tu fais
 
Model() : damier(100) { }

n°1299106
skelter
Posté le 04-02-2006 à 18:04:20  profilanswer
 

Citation :

Pour les libs, je fais pas trop gaffe en général a mes inclusions, j'ai pour habitude (surement mauvaise) de faire des copiés/collés à la pelle pour les debut de fichier d'en tete.


 
faut faire en fonction des besoins, par exemple dans ton Model.h le seul en-tete necessaire est <vector>
 

n°1299112
XSterna
Posté le 04-02-2006 à 18:23:06  profilanswer
 

Citation :

le .h c'est pour déclarer, pas pour initialiser.


 
Et oui, effectivement, le probleme vient de la. Ca compile, et je n'ai plus le pb du debut avec le tableau  :bounce:  
 

Citation :

faut faire en fonction des besoins, par exemple dans ton Model.h le seul en-tete necessaire est <vector>


 
En fait le pb c'est que je ne sais jamais de quelle librairie j'ai besoin. Du coup quand il en manque je met toute celle que je connais et que j'utilise normalement et voila ce que ca donne. Mais oui dans mon exemple je n'ai pas besoin de tout. Cependant j'inclus egalement les libraires dont j'ai besoin pour le .cpp ds le fichier d'en tete. Du coup j'ai quand meme besoin de certaines parmis celle la ne serais ce que pour les cout (dont je sais pas d'ou il viennent).
 
En tout cas, merci beaucoup a tous les deux, vous m'avez été d'une precieuse aide  :jap:

mood
Publicité
Posté le 04-02-2006 à 18:23:06  profilanswer
 

n°1299125
skelter
Posté le 04-02-2006 à 18:36:08  profilanswer
 

Citation :

En fait le pb c'est que je ne sais jamais de quelle librairie j'ai besoin. Du coup quand il en manque je met toute celle que je connais et que j'utilise normalement et voila ce que ca donne.


 
Ca passe avec l'experience, enfin quand on utilise une fonction on est censé savoir dans quel en-tete elle est déclarée  :)  et en cas d'oublie le compilateur te dis quelle fonction n'est pas déclarée et tu peux rapidement retrouver son en-tete en cherchant dans sa doc
 

Citation :

Cependant j'inclus egalement les libraires dont j'ai besoin pour le .cpp ds le fichier d'en tete.


 
tu peux les inclures dans le .cpp

n°1299448
XSterna
Posté le 05-02-2006 à 19:51:49  profilanswer
 

Oui oui , je sais ^^  
 
Il faudrait que je trouve un document ou une page internet qui resume les principales fonctions et les librairies associées. J'ai tendance a ne pas trop me triturer la tête sur les librairies, je reserve plutot ce suplice pour le reste ^^


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

  Tableau de structure

 

Sujets relatifs
Tableau de structureCopie de tableau de structure de double dans un tableau char
passant d'un tableau en structure avec divEnregistrer dans un fichier un tableau de structure
Structure en forme de tableau[Debutant] exo comprenant tableau et structure
ranger une structure dans un tableauInitialisation d'un tableau à deux dimensions de structure
tableau de structure[java] equivalent d'un tableau de structure mais en java.
Plus de sujets relatifs à : Tableau de structure


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