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

  FORUM HardWare.fr
  Programmation
  C++

  Problème de compilation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de compilation

n°1727381
sebdu94
Posté le 01-05-2008 à 21:45:36  profilanswer
 

Désolé de vous harceler de question mais j'ai un gros projet à rendre (je suis en école d'info) et je ne m'en sors pas du c++.
 
Voici mon code :

Code :
  1. class Etat
  2. {
  3. private :
  4.     bool m_est_initial;
  5.     bool m_est_final;
  6.     int m_numero;
  7.     Liste_transitions m_liste_transition;
  8. public :
  9.     Etat();
  10.     Etat(int numero);
  11.     Etat(int numero, bool initial, bool final);
  12.     ~Etat();
  13.     void ajout_transition(int, int,char);
  14.     Liste_etats retour_liste_ND(char c);
  15. };
  16. //la classe Liste_etats contient une liste d'états dans un conteneur de type vector
  17. class Liste_etats
  18. {
  19. private:
  20.     std::vector<Etat> m_tab_etats;
  21. public:
  22.     ~Liste_etats();
  23.     //méthode qui permet l'ajout d'une transition à la liste
  24.     void ajout_etat(int numero, bool initial, bool final);
  25.     int return_size();
  26.     Etat return_first();
  27.     void efface_first();
  28.     void concat(Liste_etats &l2);
  29. };


 
 
En compilant, j'obtiens l'erreur :

Citation :


parse error before '(' token sur la ligne   "Liste_etats retour_liste_ND(char c);"


 
J'imagine que c'est parce que la classe Liste_etats est après la classe où se trouve la ligne de code.
J'ai essayé de le mettre dans des autres fichiers .cpp et .h mais ça ne compile pas non plus.
 
Auriez-vous une solution ?
 
Merci beaucoup


Message édité par sebdu94 le 01-05-2008 à 21:47:09
mood
Publicité
Posté le 01-05-2008 à 21:45:36  profilanswer
 

n°1727385
Joel F
Real men use unique_ptr
Posté le 01-05-2008 à 21:49:05  profilanswer
 

forward declaration :o

 
Code :
  1. class Liste_etats;
  2. class Etat
  3. {
  4. // le code ...
  5. };
  6. class Liste_etats
  7. {
  8. // le code ...
  9. };


Message édité par Joel F le 01-05-2008 à 21:57:52
n°1727389
sebdu94
Posté le 01-05-2008 à 21:56:32  profilanswer
 

Merci beaucoup.
Il ne faut pas mettre le [cpp]  ^^   hein ?

n°1727391
Joel F
Real men use unique_ptr
Posté le 01-05-2008 à 21:57:56  profilanswer
 

quel [cpp] :o

n°1727393
sebdu94
Posté le 01-05-2008 à 22:01:33  profilanswer
 

Désolé pour ces questions bêtes.
 
 
(J'ai pas rêvé  :??: Tu avais bien mis un [cpp] ?)

n°1727452
gilou
Modérateur
Modzilla
Posté le 02-05-2008 à 00:36:42  profilanswer
 

on met un entourage [cpp]...[/cpp] sur le forum (et pas dans ton code) autour du code qu'on met en exemple ici, pour que ca soit joli a l'affichage (ca met des numeros de lignes et de la couleur...)
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1727583
sebdu94
Posté le 02-05-2008 à 12:08:19  profilanswer
 

D'accord.Merci pour ta réponse.    
J'ai un autre problème de compilation maintenant.
J'ai fais comme tu m'as dit pour un autre fichier et j'obtiens l'erreur :

Citation :

'Liste_transitions' is used as a type, but not defined as a


 
 
Voici le code de mes deux fichiers :
etats.h

Code :
  1. #include <iostream>
  2. #include <vector>
  3. #include "transition.h"
  4. class Liste_etats;
  5. class Etat
  6. {
  7. private :
  8.     bool m_est_initial;
  9.     bool m_est_final;
  10.     int m_numero;
  11.     Liste_transitions m_liste_transition;
  12. public :
  13.     Etat();
  14.     Etat(int numero);
  15.     Etat(int numero, bool initial, bool final);
  16.     ~Etat();
  17.     void ajout_transition(int, int,char);
  18.     Liste_etats retour_liste_EA(char c);
  19. };
  20. //la classe Liste_etats contient une liste d'états dans un conteneur de type vector
  21. class Liste_etats
  22. {
  23. private:
  24.     std::vector<Etat> m_tab_etats;
  25. public:
  26.     //destructeur
  27.     ~Liste_etats();
  28.     //méthode qui permet l'ajout d'une transition à la liste
  29.     void ajout_etat(int numero, bool initial, bool final);
  30.     Liste_etats retour_liste_EA(char c);
  31. };


 
transition.h

Code :
  1. #include <iostream>
  2. #include <vector>
  3. #include "etats.h"
  4. class Liste_etats;
  5. //la classe Transition contient les infos d'une transition, cad l'état de départ, l'état d'arrivée, et la lettre
  6. class Transition
  7. {
  8. private:
  9.     int m_depart, m_arrivee;
  10.     char m_etiquette;
  11. public:
  12.     Transition();
  13.     Transition(int, int, char);
  14.     int get_arrivee();
  15.     char get_etiquette();
  16. };
  17. //la classe Liste_transitions contient une liste de transitions dans un conteneur de type vector
  18. class Liste_transitions
  19. {
  20. private:
  21.     std::vector<Transition> m_tab_transitions;
  22. public:
  23.     //destructeur
  24.     ~Liste_transitions();
  25.     //méthode qui permet l'ajout d'une transition à la liste
  26.     void ajout_transition(int depart,int arrivee, char lettre);
  27.     Liste_etats retour_liste_EA(char c);
  28. };


 
L'erreur est pour la ligne 14 du premier fichier.
 
Merci d'avance.


Message édité par sebdu94 le 02-05-2008 à 12:30:49
n°1727588
gilou
Modérateur
Modzilla
Posté le 02-05-2008 à 12:18:14  profilanswer
 

Citation :

Liste_transitions m_liste_transition;

Tu utilises un type, Liste_transitions, sans avoir dit au préalable a ton compilo ce que c'était. Normal qu'il rale que tu l'empeche de faire son boulot. Il a pas une boule de cristal pour deviner ce que c'est, Liste_transitions, si tu ne le lui dis pas.  
A+,


Message édité par gilou le 02-05-2008 à 12:19:23

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1727598
sebdu94
Posté le 02-05-2008 à 12:32:12  profilanswer
 

Pourtant je met le  

Code :
  1. #include "transition.h"


qui contient la classe Liste_transitions en haut du fichier etat.h .
 
ça ne suffit pas ?

n°1727602
sebdu94
Posté le 02-05-2008 à 12:46:07  profilanswer
 

Vous ne voyez pas ce que je veux dire ?

mood
Publicité
Posté le 02-05-2008 à 12:46:07  profilanswer
 

n°1727612
Elmoricq
Modérateur
Posté le 02-05-2008 à 13:23:57  profilanswer
 

Si, mais c'est le problème du serpent qui se mord la queue. Quand tu écris :
#include "etats.h"
le compilateur lit ce fichier, qui fait état de la classe Liste_Transition qu'il ne connait pas encore à cet endroit du code, puisque défini en dessous.


Message édité par Elmoricq le 02-05-2008 à 13:25:18
n°1727613
sebdu94
Posté le 02-05-2008 à 13:25:13  profilanswer
 

Merci
 
Y a t'il une ou des solution(s) ?

n°1727615
Elmoricq
Modérateur
Posté le 02-05-2008 à 13:29:23  profilanswer
 

Oui, il y a des solutions.

 

Mais ajouter un extern c'est comme coller un bout de scotch sur une machine à gaz, ça fonctionne mais c'est laid. Prends du recul sur ton code : si tu as des fichiers en-têtes qui s'appellent mutuellement, c'est qu'il y a un sérieux problème de conception.


Message édité par Elmoricq le 02-05-2008 à 13:29:28
n°1727616
sebdu94
Posté le 02-05-2008 à 13:30:35  profilanswer
 

ça compile en faisant :
 

Code :
  1. class Etat;
  2. class Liste_etats;


 
à la place d'inclure etat.h
 
 
Mais est-ce une bonne solution ?
 
 
Encore merci pour la réponse précédente :).

n°1727790
Joel F
Real men use unique_ptr
Posté le 02-05-2008 à 19:44:23  profilanswer
 

oui, le forward declaration est toujours la bonne option

n°1727902
sebdu94
Posté le 03-05-2008 à 10:46:17  profilanswer
 

Merci !!!!!!!!!!!


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

  Problème de compilation

 

Sujets relatifs
Problème compilation Libcaca (pour VLC)Problème compilation Libcaca (pour VLC)
problème de compilation avec la librairie qwt[c++][resolu]Problème de compilation.
probléme de compilation avec code::blocksProbleme de compilation
probleme lors de compilation module manquant[Résolu] Problème de compilation Qt
Problème COMPILATION Code::BlockProblème Compilation avec Code::Block
Plus de sujets relatifs à : Problème de compilation


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