Se connecter / S'enregistrer
Votre question

STL /C++

Tags :
  • Visual studio
  • Programmation
Dernière réponse : dans Programmation
14 Janvier 2011 11:01:26

Bonjour,

j'ai touvé sur internet un code qui est fait sur g++ (unix) alors que j'utilise windows (c++, visual studio 2005), en compilant le programme me donne l'erreur suivante:
error C2664: 'std::_Tree<_Traits>::iterator ::iterator(const std::_Tree<_Traits>::iterator &)'*: impossible de convertir le paramètre 1 de 'int' en 'const std::_Tree<_Traits>::iterator &'

Alors vous trouvez ci-dessous le code écrit dans le fichier où l'erreur est associé:

l'erreur est indiqué pour la ligne 81 : (EdgeInfo() : trid(0), v(0), it(0) {})

code:

  1. #ifndef CFMTCONVERTER_HPP
  2. #define CFMTCONVERTER_HPP
  3.  
  4. #include <vector>
  5. #include <map>
  6. #include <assert.h>
  7.  
  8. #include "Elements.hpp"
  9.  
  10. struct TriInfo
  11. {
  12. unsigned int fnext[6];
  13. unsigned int id;
  14. TriInfo() : id(0)
  15. { memset(fnext, 0, sizeof(fnext)); }
  16. void Set(unsigned int next[6])
  17. {
  18. for(unsigned int i = 0; i <6; i++)
  19. if(next[i])
  20. {
  21. //assert(!fnext[i]);
  22. fnext[i] = next[i];
  23. }
  24. }
  25. bool Filled(unsigned int pos[3])
  26. {
  27. bool bret = false;
  28. if(!fnext[1])
  29. {
  30. pos[0] = 1; assert(!fnext[1] && fnext[0]);
  31. pos[1] = 3; assert(!fnext[3] && fnext[2]);
  32. pos[2] = 5; assert(!fnext[5] && fnext[4]);
  33. }
  34. else if(!fnext[0])
  35. {
  36. pos[0] = 0; assert(fnext[1] && !fnext[0]);
  37. pos[1] = 2; assert(fnext[3] && !fnext[2]);
  38. pos[2] = 4; assert(fnext[5] && !fnext[4]);
  39. }
  40. else
  41. {
  42. assert(fnext[0] && fnext[1] && fnext[2] &&
  43. fnext[3] && fnext[4] && fnext[5]);
  44. bret = true;
  45. }
  46. return bret;
  47. }
  48. };
  49.  
  50. struct EdgeInfo
  51. {
  52. unsigned int trid;
  53. unsigned int v;
  54. unsigned int t;
  55. std::map<Tri, TriInfo>::iterator it;
  56. EdgeInfo() : trid(0), v(0), it(0) {}
  57. EdgeInfo(unsigned id, unsigned pos,
  58. const std::map<Tri, TriInfo>::iterator & itr) :
  59. trid(id), v(pos), it(itr) {}
  60. };
  61.  
  62. class CFmtConverter
  63. {
  64. public:
  65. CFmtConverter(class CFileReader *rdr);
  66. void Read(const char* fname, int type);
  67. //std::vector<Vertex> m_vertlist;
  68. class CTrist* CreateTrist(int batch);
  69. void CopyVertexList(std::vector<Vertex> & vertexlist);
  70. void CopyVertexTriList(std::vector<Vertex> & vertexlist, std::vector<int> & trilist);
  71. void List();
  72. void SortTetTri();
  73. void ListTriFnexts();
  74. private:
  75. void ProcessTets();
  76. unsigned int Index(unsigned int val, const unsigned int verts[3]);
  77. unsigned int Pos(unsigned int val1, unsigned int val2,
  78. const unsigned int verts[3]);
  79. void OrientTet(Tet & tet);
  80. void SplitToTri(const Tet & tet, unsigned int tri[4][3]);
  81. void SetInnerFNexts(const Tet & tet, unsigned int tri[4][3]);
  82. void SetOuterFNexts(const std::map<Tri, TriInfo>::iterator & it);
  83. void Order(unsigned int & a, unsigned int & b);
  84.  
  85. CFileReader *m_rdr;
  86. //std::vector<Vertex> m_vertlist;
  87. std::vector<Tet> m_tetlist;
  88. std::map<Tri, TriInfo> trimap;
  89. std::map<Edge, EdgeInfo> edgemap;
  90.  
  91. static unsigned int edgepos[3][3];
  92. static unsigned int posedge[6][2];
  93. static unsigned int fnextpos[4][3];
  94. static unsigned int nodepos[4][3];
  95. static unsigned int trcnt;
  96. };
  97.  
  98. #endif



l'erreur est dû à it(0). Le compilo attend un itérateur alors qu'ils lui passent 0 qui est un entier.

je ne maitrise pas la STL et je ne vois pas comment initialiser l'itérateur dans la liste d'initialisation.


Alors, quelqu'un peut m'aider!

Merci

Autres pages sur : stl

a b L Programmation
14 Janvier 2011 19:55:32

Avec la STL, ces itérateurs s'instancient sans paramètre.
Donc, enlève le it(0) qui, de toute façon, ne te servira à rien: l'itérateur sera déjà instancié car c'est directement une variable membre.
18 Janvier 2011 11:39:26

Salut,
Merci beaucoup, c'est bon pour cette erreur.

Mais j'ai une autre erreur:

src\CTrist.hpp(34) : fatal error C1083: Impossible d'ouvrir le fichier include : 'unordered_map' : No such file or directory


Voilà le code du CTrist.hpp:



#ifndef CTRIST_HPP
#define CTRIST_HPP

#include "Elements.hpp"
#include <map>
#include <vector>
#include <list>
#include <unordered_map>


#define org_Mask ((Trist_org) org_max)



class CTrist
{

public:
CTrist() : m_trist(0), m_tr(0) {};

typedef std::multimap<int, int> map1;

void Allocate(unsigned int max_n, unsigned int m, int bat);
unsigned int MakeTri(const unsigned int verts[3],
unsigned int id = 0, unsigned int *fnext = 0, int type = 0);


unsigned int Sym(unsigned int e);
unsigned int Dest (unsigned int e);
unsigned int Apex(unsigned int e);
unsigned int Turn(unsigned int e);
unsigned int Enext (unsigned int e);
unsigned int Enext2 (unsigned int e);
unsigned int Fnext (unsigned int e);
unsigned int Org (unsigned int e);

void CheckConsistency();
void Declare();
void Fill(int v, int u, int i, int w, std::map<int, int>* trace, size_t space, std::map<int, int>* EdgeID, size_t total);


void stepIn(std::map<int, int>* TriContainingRoot, size_t total, std::map<int, int>* Critical_Upper, size_t total1, std::map<int, int>* Critical_Lower, size_t total2, std::map<int, int>* Up_Star, size_t total3);
void Print(int e, std::map<int, int>* TriContainingRoot, size_t total5, std::map<int, int>* upper, size_t total, std::map<int, int>* Critical_Upper, size_t total1, std::map<int, int>* Critical_Lower, size_t total2, std::map<int, int>* lower, size_t total4, std::map<int, int>* Up_Star, size_t total3);
void Print2D(std::map<int, int>* TriContainingRoot, size_t total5, std::map<int, int>* upper, size_t total, std::map<int, int>* Critical_Upper, size_t total1, std::map<int, int>* Critical_Lower, size_t total2, std::map<int, int>* lower, size_t total4, std::map<int, int>* Up_Star, size_t total3);
void Traverse(int i1, int j1, int k1, int t, std::map<int, int>* Critical_Upper, size_t total5, std::map<int, int>* Critical_Lower, size_t total2, std::map<int, int>* TriContainingRoot, size_t total, std::map<int, int>* upper, size_t total1, std::map<int, int>* lower, size_t total6);
int Find(int flag,int cv, int x, std::map<int, int>* upper, size_t total1, std::map<int, int>* lower, size_t total2);
void List(char* filename);


void ComputeReebgraph(std::map<int, int>* Critical_Lower, size_t total2, std::map<int, int>* TriContainingRoot, size_t total, std::map<int, int>* Critical_Upper, size_t total1, std::map<int, int>* Up_Star, size_t total3, int cur, int batch);
void ConnectCriticalPoints(std::map<int, int>* TriContainingRoot, size_t total, std::map<int, int>* Critical_Upper, size_t total1, std::map<int, int>* Critical_Lower, size_t total2, std::map<int, int>* Up_Star, size_t total3, std::unordered_map<int, int>* CriticalSetComplete, size_t total5, int cur, int batch);
void CalculateCriticalSet(std::map<int, int>* TriContainingRoot, size_t total, std::map<int, int>* Critical_Upper, size_t total1,
std::map<int, int>* Critical_Lower, size_t total2, std::multimap<int, int>* CriticalSet, size_t total3);
int TravelUp(std::map<int, int>* TriContainingRoot, size_t total, std::map<int, int>* Critical_Upper, size_t total1,std::map<int, int>* Critical_Lower, size_t total2, int Index, int criticalPoint, int level, std::unordered_map<int, int>* CriticalSetComplete, size_t total3, std::map<int, int>* Up_Star, size_t total4, int component, bool flag, int extent, int cur);

bool ComputeSet(std::vector<std::vector<bool> > &Tri_Tag,std::map<int, int>::iterator* cit, size_t number, int secondLevel, std::map<int, int>* Critical_Lower, size_t total2, std::map<int, int>* TriContainingRoot, size_t total, int triangle, int criticalPoint, int componentNo, double value, std::multimap<int, int>* CriticalSet, size_t total3);
void ComputeCriticalSet(std::map<int, int>* Critical_Lower, size_t total2, std::map<int, int>* TriContainingRoot, size_t total, std::unordered_map<int, int>* CriticalSetComplete, size_t total5, std::map<int, int>* Critical_Upper, size_t total1, int cur, int batch);
int ComputeCriticalSetUp(int CPIndex, std::map<int, int>* Critical_Upper, size_t total1, std::map<int, int>* TriContainingRoot, size_t total);
void CopyTriMap(std::multimap<int, int> TriCopy);
CTrist(class CFmtConverter *rdr);
void Output(char* filename);


private:
typedef unsigned int Trist_org;
struct Trist_record
{
Trist_org origin[3];
unsigned int fnext[6];
};
struct Trist
{
unsigned int max_org;
unsigned int max_triangle;
Trist_record *triangle; /* [1..last_triangle]; entry [0] is unused! */
unsigned int last_triangle;
unsigned int used_triangles;
//unsigned int *Vcoface;/* -- Vijay */
};


void Clear();
unsigned int TrIndex(unsigned int t)
{ return t >> 3; }
unsigned int TrVersion(unsigned int t)
{ return t & 07; }
unsigned int Odd(unsigned int e)
{ return (e % 2) == 1; }

CFmtConverter *reader;
static unsigned int org_max;
static unsigned int vo[6]; /* origins wrt triangle version */
static unsigned int ve[6]; /* enexts ... */
Trist* m_trist;
Trist_record *m_tr; /* shortcut for st->triangle */


};

inline unsigned int EdFacet(unsigned int t, unsigned int v)
{ return ((t<<3) + v); }


#endif


Merci de m'aider pour trouver la solution!

NB: si vous voulez plus d'information sur le code je l'ai trouvé sur le site suivant: http://vgl.serc.iisc.ernet.in/news.php

Merci.



Contenus similaires
a b L Programmation
18 Janvier 2011 23:09:38

Il te faut utiliser une version de la STL plus récente, au moins la TR1 (Technical Report 1).
A toi de voir si un simple map ne te conviendrait pas.
19 Janvier 2011 10:25:59

OK, Merci beaucoup.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS