C++
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

C++



  1. #1
    inviteef6744ab

    C++


    ------

    Bonjour,

    j'ai touvé sur internet un code qui est fait sur g++ (unix) alors que je travaille sur 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:
    #ifndef CFMTCONVERTER_HPP
    #define CFMTCONVERTER_HPP
    
    #include <vector>
    #include <map>
    #include <assert.h>
    
    #include "Elements.hpp"
    
    struct TriInfo
    {
    	unsigned int fnext[6];
    	unsigned int id;
    	TriInfo() : id(0)
    	{ memset(fnext, 0, sizeof(fnext)); } 
    	void Set(unsigned int next[6])
    	{
    		for(unsigned int i = 0; i <6; i++)
    			if(next[i])
    			{
    				//assert(!fnext[i]);
    				fnext[i] = next[i];
    			}				
    	}
    	bool Filled(unsigned int pos[3])
    	{
    		bool bret = false;
    		if(!fnext[1])
    		{
    			pos[0] = 1; assert(!fnext[1] && fnext[0]);
    			pos[1] = 3; assert(!fnext[3] && fnext[2]);
    			pos[2] = 5; assert(!fnext[5] && fnext[4]);
    		}
    		else if(!fnext[0])
    		{
    			pos[0] = 0; assert(fnext[1] && !fnext[0]);
    			pos[1] = 2; assert(fnext[3] && !fnext[2]);
    			pos[2] = 4; assert(fnext[5] && !fnext[4]);
    		}
    		else
    		{ 
    			assert(fnext[0] && fnext[1] && fnext[2] && 
    				fnext[3] && fnext[4] && fnext[5]);
    			bret = true;
    		}
    		return bret;
    	}
    };
    
    struct EdgeInfo
    {
    	unsigned int trid;
    	unsigned int v;
    	std::map<Tri, TriInfo>::iterator it;
    	EdgeInfo() : trid(0), v(0), it(0) {}
    	EdgeInfo(unsigned id, unsigned pos, 
    		const std::map<Tri, TriInfo>::iterator & itr) :
    		trid(id), v(pos), it(itr) {}
    };
    
    class CFmtConverter
    {
    public:
    	CFmtConverter(class CFileReader *rdr); 
    	void Read(const char* fname, int type);
    	//std::vector<Vertex> m_vertlist;
    	class CTrist* CreateTrist(int batch);
    	void CopyVertexList(std::vector<Vertex> & vertexlist);
    	void CopyVertexTriList(std::vector<Vertex> & vertexlist, std::vector<int> & trilist);
    	void List();
    	void SortTetTri();
    	void ListTriFnexts();
    private:
    	void ProcessTets();
    	unsigned int Index(unsigned int val, const unsigned int verts[3]);
    	unsigned int Pos(unsigned int val1, unsigned int val2, 
    				const unsigned int verts[3]);
    	void OrientTet(Tet & tet);
    	void SplitToTri(const Tet & tet, unsigned int tri[4][3]);
    	void SetInnerFNexts(const Tet & tet, unsigned int tri[4][3]);
    	void SetOuterFNexts(const std::map<Tri, TriInfo>::iterator & it);
    	void Order(unsigned int & a, unsigned int & b); 
    	
    	CFileReader *m_rdr;	
    	//std::vector<Vertex> m_vertlist;
    	std::vector<Tet> m_tetlist;
    	std::map<Tri, TriInfo> trimap;
    	std::map<Edge, EdgeInfo> edgemap;
    
    	static unsigned int edgepos[3][3];
    	static unsigned int posedge[6][2];
    	static unsigned int fnextpos[4][3];
    	static unsigned int nodepos[4][3];
    	static unsigned int trcnt;
    };
    
    #endif
    Si quelqu'un peut m'aider pour résoudre ce problème!
    Merci

    C'est quand même plus lisible avec les balises code, non?

    -----
    Dernière modification par Jack ; 11/01/2011 à 20h01.

  2. #2
    Jack
    Modérateur

    Re : C++

    on peut avoir le message d'erreur?

    A+

  3. #3
    inviteef6744ab

    Re : C++

    Voilà le message d'erreur:

    CFmtConverter.hpp(81) : 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 &'
    1> with
    1> [
    1> _Traits=std::_Tmap_traits<Tri, TriInfo,std::less<Tri>,std::al locator<std:: pair<const Tri,TriInfo>>,false>
    1> ]
    1> Raison*: impossible de convertir de 'int' en 'const std::_Tree<_Traits>::iterator'
    1> with
    1> [
    1> _Traits=std::_Tmap_traits<Tri, TriInfo,std::less<Tri>,std::al locator<std:: pair<const Tri,TriInfo>>,false>
    1> ]
    1> Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé

  4. #4
    Jack
    Modérateur

    Re : C++

    on dirait que c'est dû à it(0). Le compilo attend un itérateur alors que tu lui passes 0 qui est un entier.

    A+

  5. A voir en vidéo sur Futura
  6. #5
    inviteef6744ab

    Re : C++

    Ok, est ce que tu as une idée comment je peux le corriger, parce que j'arrive pas.

    Merci beaucoup
    A+

  7. #6
    inviteef6744ab

    Re : C++

    Si tu as besoin plus d'information sur le projet, je l'ai trouvé sur ce lien: http://vgl.serc.iisc.ernet.in/news.php
    C++ Reeb Graph library released!

  8. #7
    Jack
    Modérateur

    Re : C++

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

    A+

  9. #8
    inviteef6744ab

    Re : C++

    Moi non plus.
    Merci!