[C++] pb de typedef et struc/vector (rézolu)

pb de typedef et struc/vector (rézolu) [C++] - C++ - Programmation

Marsh Posté le 14-06-2003 à 13:44:49    

somme.cpp:25: template-argument `main()::MyStruct' uses local type `
   main()::MyStruct'
somme.cpp:25: template argument 2 is invalid
somme.cpp:25: ISO C++ forbids declaration of `type name' with no type
 
typedef struct MyStruct { int valeur ; int indice ;} ;
vector < vector < MyStruct > > S ;
 
 
 
 
 :heink:  :heink:


Message édité par farib le 14-06-2003 à 14:01:04
Reply

Marsh Posté le 14-06-2003 à 13:44:49   

Reply

Marsh Posté le 14-06-2003 à 13:49:43    

http://www.chezmoicamarche.com [:spamafote]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 14-06-2003 à 13:50:39    


c clair....
 
comprend pas


Message édité par farib le 14-06-2003 à 13:51:33
Reply

Marsh Posté le 14-06-2003 à 13:52:08    

Montre un peu plus de code


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 14-06-2003 à 13:53:41    

Code :
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std ;
  5. int main()
  6. {
  7. int p = 3 ; int h=7 ;
  8. cout << p << " matieres , " << h << " heures de revision." << endl;
  9. vector< vector<int> > N(p) ;
  10. for (int i = 0;  i < p ; i++)
  11. {
  12.  N[i]=vector<int>(h+1);
  13.  fill(N[i].begin(),N[i].end(),0);
  14. }
  15. N[0][0] = 1 ; N[0][1] = 2 ;N[0][2] = 2 ;N[0][3] = 3 ;N[0][4] = 5 ;N[0][5] = 6 ; N[0][6] = 8 ; N[0][7] = 10 ;
  16. N[1][0] = 2 ; N[1][1] = 4 ;N[1][2] = 5 ;N[1][3] = 5 ;N[1][4] = 6 ;N[1][5] = 6 ; N[1][6] = 6 ; N[1][7] = 7 ;
  17. N[2][0] = 0 ; N[2][1] = 1 ;N[2][2] = 2 ;N[2][3] = 2 ;N[2][4] = 4 ;N[2][5] = 6 ; N[2][6] = 7 ; N[2][7] = 8 ;
  18. typedef struct MyStruct { int valeur ; int indice ;} ;
  19. vector < vector < MyStruct > > S ;
  20. return 0;
  21. }

Reply

Marsh Posté le 14-06-2003 à 13:56:04    

farib a écrit :

Code :
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std ;
  5. int main()
  6. {
  7. int p = 3 ; int h=7 ;
  8. cout << p << " matieres , " << h << " heures de revision." << endl;
  9. vector< vector<int> > N(p) ;
  10. for (int i = 0;  i < p ; i++)
  11. {
  12.  N[i]=vector<int>(h+1);
  13.  fill(N[i].begin(),N[i].end(),0);
  14. }
  15. N[0][0] = 1 ; N[0][1] = 2 ;N[0][2] = 2 ;N[0][3] = 3 ;N[0][4] = 5 ;N[0][5] = 6 ; N[0][6] = 8 ; N[0][7] = 10 ;
  16. N[1][0] = 2 ; N[1][1] = 4 ;N[1][2] = 5 ;N[1][3] = 5 ;N[1][4] = 6 ;N[1][5] = 6 ; N[1][6] = 6 ; N[1][7] = 7 ;
  17. N[2][0] = 0 ; N[2][1] = 1 ;N[2][2] = 2 ;N[2][3] = 2 ;N[2][4] = 4 ;N[2][5] = 6 ; N[2][6] = 7 ; N[2][7] = 8 ;
  18. typedef struct MyStruct { int valeur ; int indice ;} ;
  19. vector < vector < MyStruct > > S ;
  20. return 0;
  21. }

 


Peut-etre
 

Code :
  1. vector < vector < struct MyStruct > > S ;

 
 
non?

Reply

Marsh Posté le 14-06-2003 à 13:57:23    

bah c un typedef mystruct
v essayer qd même

Reply

Marsh Posté le 14-06-2003 à 13:59:13    

Evite de définir des type locaux à une fonction, ils ne sont pas visible dans les fonctions appelées. Ici, MyStruct n'est connu que dans main, donc les fonctions de la classe vector ne le connaissent pas et sont donc incapables de les utiliser.
 
Met tes déclarations de type en dehors de toutes fonctions.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 14-06-2003 à 14:00:21    

farib a écrit :

bah c un typedef mystruct
v essayer qd même


bah si mes souvenirs sont bons en faisant

Code :
  1. typedef struct MyStruct { int valeur ; int indice ;} ;


Tu dis que  
"struct MyStruct" contient "int valeur ; int indice ;"
 
Sinon tu fais un  

Code :
  1. typedef struct MyStruct { int valeur ; int indice ;} MyStruct;


 
[edit]
Ou alors je raconte n'importe kwa, c'est possible aussi... [:skeye]


Message édité par skeye le 14-06-2003 à 14:00:56
Reply

Marsh Posté le 14-06-2003 à 14:00:29    

effectivement
 
j'étais distrait

Reply

Marsh Posté le 14-06-2003 à 14:00:29   

Reply

Marsh Posté le 14-06-2003 à 14:00:57    

euh on fait du C++ mec,
 
le typedef ne sert à rien
 
tu peux directement ecrire
 
Mastruct u;
 
tout ceux chez qui ça marche, je sens du VC
 
 
si tu veux quand meme renommer ton type
 
struct MyStruct;
typedef MyStruct MaStructure;

Reply

Marsh Posté le 14-06-2003 à 14:02:05    

j'ai besoin de typedef a cause du vecteur

Reply

Marsh Posté le 14-06-2003 à 14:05:22    

++Taz a écrit :


tout ceux chez qui ça marche, je sens du VC


 
gcc 2.95.4
 
Je suis surpris que ça compile aussi :
 

Code :
  1. #include <vector>
  2. typedef struct MyStruct { int valeur ; int indice ;} ;
  3. vector < vector < MyStruct > > S ;


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 14-06-2003 à 14:09:01    

car ça ne doit pas
 
 
c'est tout à fait légal ISO C++ forbids declaration of `type name' with no type, j'aurais répondu la même chose

Reply

Marsh Posté le 14-06-2003 à 14:14:10    

Pour ma culture, c'est des conneries ce que j'ai raconté? Des souvenirs de C? :??:

Reply

Marsh Posté le 14-06-2003 à 14:25:36    

oui

Reply

Marsh Posté le 14-06-2003 à 16:03:30    

++Taz a écrit :

car ça ne doit pas
 
 
c'est tout à fait légal ISO C++ forbids declaration of `type name' with no type, j'aurais répondu la même chose


 
c'est normal que ca compile.
 
j'avais pas fé gaffe, le typedef était dans le main avec le S, il fallait que le typedef soit en dehors ( ca pourrait marcher pourtant, le typedef avait portée jusqu'a la fin du main ???)
 
la ca marche pour kadreg c juste que S est déclaré en global aussi.

Reply

Sujets relatifs:

Leave a Replay

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