Type non reconnu

Type non reconnu - C++ - Programmation

Marsh Posté le 11-12-2005 à 16:34:49    


 
Bonjour à tous,
 
je souhaite me créer moi même une classe permettant de modéliser des Graphes en mémoire.
J'ai donc une classe Graphe et une classe Noeud et une classe Arc.
 
J'utilise donc le code ci-dessous :
 

Code :
  1. struct Arc
  2. {
  3.  int curs; // l'arc pointe vers un autre noeud dans le liste
  4. };
  5. class Noeud
  6. {
  7.         public :
  8.     vector<Arc> lst_arc; // chaque noeud est relié à d'autres par des arcs
  9.             Point pos; // la position du noeud dans le graphe (utile pour l'image du graphe)
  10.             double aire;
  11.             Noeud();
  12.   Noeud(int,int); 
  13. };
  14. class Graphe
  15. {
  16.         private :
  17.   vector<Noeud> lst_noeud; // un graphe est constitué d'une liste de noeuds
  18.   Point max_coord; // le noeud le plus en bas à droite
  19.   int nb_graphe;
  20.  public :
  21.   Graphe();
  22.   void ajouter_noeud(Noeud);
  23.   int taille();
  24.   Noeud get_noeud(int);
  25. };


 
A la compilation, j'ai le message d'erreur suivant :
 
- type/value mismatch at argument 1 in template parameter list for `template<class _Tp, class _Alloc> class std::vector'
- expected a type, got `Arc'
- template argument 2 is invalid
 
Il me laisse penser que le type Arc n'est pas reconnu, puisque quand je mets par exemple le type "int", il compile sans ronchonner.
Ce qui est bizarre c'est que je n'ai aucun problème avec le vecteur de Noeud, juste le vecteur d'Arc !
 
Quelqu'un a-t-il une idée ?
 
Merci bien !

Reply

Marsh Posté le 11-12-2005 à 16:34:49   

Reply

Marsh Posté le 11-12-2005 à 16:37:31    

Euh t'as fait une struct, pas une classe, et pas de typedef, ça parait normal, non? :??:


Message édité par skeye le 11-12-2005 à 16:37:46

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 11-12-2005 à 16:41:46    

j'ai modifié ma structure en  
 

Code :
  1. class Arc
  2. {
  3. public :
  4.  int curs; // l'arc pointe vers un autre noeud dans le liste
  5.  Arc();
  6.  Arc(int);
  7. };


 
Mais pas mieux...
 
Je connais pas le typedef, comment ca marche ?  :??:  
 
Merci !

Reply

Marsh Posté le 11-12-2005 à 16:45:01    

Montre un exemple minimal compilable. Sinon, ça parait bon.

Reply

Marsh Posté le 11-12-2005 à 16:47:57    

Voila le fichier .h
 

Code :
  1. #include<iostream>
  2. #include<string>
  3. #include<vector>
  4. using namespace std;
  5. struct Point
  6. {
  7. int x;
  8. int y;
  9. };
  10. class Arc
  11. {
  12. public :
  13.  int curs; // l'arc pointe vers un autre noeud dans le liste
  14.  Arc();
  15.  Arc(int);
  16. };
  17. class Noeud
  18. {
  19.         public :
  20.   vector<Arc> lst_arc; // chaque noeud est relié à d'autres par des arcs
  21.             Point pos; // la position du noeud dans le graphe (utile pour l'image du graphe)
  22.             double aire;
  23.             Noeud();
  24.   Noeud(int,int); 
  25. };
  26. class Graphe
  27. {
  28.         private :
  29.   vector<Noeud> lst_noeud; // un graphe est constitué d'une liste de noeuds
  30.   Point max_coord; // le noeud le plus en bas à droite
  31.   int nb_graphe;
  32.  public :
  33.   Graphe();
  34.   void ajouter_noeud(Noeud);
  35.   int taille();
  36.   Noeud get_noeud(int);
  37. };


 
et voila le .cpp
 

Code :
  1. #include "structures.h"
  2. Arc::Arc()
  3. {
  4. curs = 0;
  5. }
  6. Arc::Arc(int a)
  7. {
  8. curs = a;
  9. }
  10. Noeud::Noeud()
  11. {
  12. lst_arc = new vector<Arc>();
  13. pos.x = 0;
  14. pos.y = 0;
  15. aire = 0.0;
  16. }
  17. Noeud::Noeud(int x,int y)
  18. {
  19. lst_arc = new vector<Arc>();
  20. pos.x = x;
  21. pos.y = y;
  22. aire = 0.0;
  23. }
  24. Graphe::Graphe()
  25. {
  26. max_coord.x = 0;
  27. max_coord.y = 0;
  28. nb_graphe = 0;
  29. }
  30. void Graphe::ajouter_noeud(Noeud n)
  31. {
  32. /* ON TESTE SI LE POINT EST EN DEHORS DES LIMITES */
  33. if(n.pos.x > max_coord.x)
  34.  max_coord.x = n.pos.x;
  35. if(n.pos.y > max_coord.y)
  36.  max_coord.y = n.pos.y;
  37. /* ON AJOUTE LE NOEUD A LA FIN DU VECTEUR */
  38. lst_noeud.push_back(n);
  39. nb_graphe++;
  40. }
  41. int Graphe::taille()
  42. {
  43. return nb_graphe;
  44. }
  45. Noeud Graphe::get_noeud(int i)
  46. {
  47. return lst_noeud[i];
  48. }
  49. int main()
  50. {
  51. Graphe mon_graphe;
  52. Noeud nd1(98,3),nd2,nd3(3,5);                 
  53. mon_graphe.ajouter_noeud(nd1);
  54. mon_graphe.ajouter_noeud(nd2);
  55. mon_graphe.ajouter_noeud(nd3);
  56. /*for(int i=0;i<mon_graphe.taille();i++)
  57. {
  58.  cout << "nd" << i << " : x = " << mon_graphe.get_noeud(i).pos.x << " y = " << mon_graphe.get_noeud(i).pos.y << endl;
  59. }*/
  60. system("PAUSE" );
  61. }


 
Vala...

Reply

Marsh Posté le 11-12-2005 à 16:48:08    

non compilable plutot :D

Reply

Marsh Posté le 11-12-2005 à 16:54:40    

dans le .cpp, ligne 15 et ligne 23, y a menu problème ...

Reply

Marsh Posté le 11-12-2005 à 16:57:13    

Ouuups, en fait avant j'utilisais des pointeurs, pas des données fixes... J'ai oublié de changer ces deux lignes...
 
Mais en les supprimant ca ne marche pas mieux... :S

Reply

Marsh Posté le 11-12-2005 à 17:02:13    

c'est dans ton constructeur de Noeud
tu n'as pas besoin d'allouer le vector<Arc>, tu peux éventuellement l'initialiser a une certaine taille ou contenu
 
Noeud::Noeud() : lst_arc(7,Arc(-333))
{
//    lst_arc = new vector<Arc>();
    pos.x = 0;
    pos.y = 0;
    aire = 0.0;
}

Reply

Marsh Posté le 11-12-2005 à 17:05:07    

je supprime ces  2 lignes, et je n'ai pas d'erreurs à la compilation.
Quelles sont tes erreurs ???
 
et met des include guards dans ton .h :o

Reply

Marsh Posté le 11-12-2005 à 17:05:07   

Reply

Marsh Posté le 11-12-2005 à 17:12:12    

Ca marche, c'est moi qui suis dyslexique :)
 
Merci pour votre aide !

Reply

Sujets relatifs:

Leave a Replay

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