IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Problème basique avec unordered_set


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Par défaut Problème basique avec unordered_set
    Bonjour, je compile un code qui utilise un unordered_set
    j'ai bien #include<unordered_set>,
    j'ai bien using namespace std;
    j'ai bien utilisé le -std=c0x,
    par contre j'ai toujours des tas de Symbol 'unordered_set' could not be resolved à la compilation... une idée ?
    ....
    Après avoir cherché un moment je ne vois pas ce qui cloche a ce sujet en tout cas et ça m’empêche d'avancer donc je mets le détail du code si quelqu un a une idée je suis preneur (j'utilise un unordered_set pour ne pas passer ma vie a vérifier que je n'ai pas déjà intégré un nœud donné au graphe).
    Il y a certainement d'autres choses qui clochent que mon problème mentionné ci-dessus mais pour l'instant c'est mon principal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
     
    #ifndef GRAPH_H_
    #define GRAPH_H_
    #include<vector>
    #include<iterator>
    #include<map>
    #include<stack>
    #include<queue>
    #include<unordered_set>
    #include "Node.h"
     
    using namespace std;
     
    namespace DD {
     
     
    template<typename T> class Graph {
    public:
    	enum Mode {PROPRIETARY, NOCARE}; // S'occupe de la destruction des noeuds (PROPRIETARY) ou pas (NOCARE).
    private:
     
     
    	bool knowConnex; // Utilisation future
    	bool knowCycles; // Utilisation future
    	bool hasCycle;   // Utilisation future
    	int nConnex;     // Utilisation future
    	unordered_set<Node<T>*> nodes; 
    //	vector<typename unordered_set<typename Node<T>*> > connexComp;
    	Mode mode;
     
    public:
     
    	Graph() : /*connexComp(vector<typename unordered_set<typename Node<T>*> >() ),*/ knowConnex(false),
    			knowCycles(false), nConnex(0), hasCycle(false), mode(NOCARE), nodes(unordered_set<Node<T>*>()){}
    	bool empty() const {return nodes.empty();}
     
    	Graph(Node<T>* pN) : Graph() {
    		insert(pN);
    	}
     
    	void insert(Node<T>* pN){
    		if (nodes.find(pN)==nodes.end()){
    		nodes.insert(pN);
    		DFIterator dfiterator(pN);
    		Node<T>* pNN;
    		while (pNN=*(++dfiterator)) {nodes.insert(pNN);}
    		}
    	}
    	void setMode(Mode M){mode = M;}
    //	int nCycles() const {return nCycles;}
    //	int nConnexComp() const {return nConnex;}
    //	virtual bool isTree() const {return (nCycles()==0) && (nConnexComp()==1);}
    	virtual ~Graph() {
    		if (mode==PROPRIETARY) {
    			auto e=nodes.end();
    			auto b=nodes.begin();
    			for(; b!=e; b++) delete *b;
    		}
    	}
     
    	class DFIterator : public iterator<forward_iterator_tag, Node<T>*>
    	{
    		Node<T>* pointedNode;
    		stack<Node<T>*> nextToVisit;
    		map<Node<T>*,bool> marked;
    		int nMarked;
     
    		void push(const vector<Node<T>*>& v)
    		{for(int i=v.size()-1;i>=0;i--) nextToVisit.push(v[i]);}
    		void markAndPush()
    		{
    			marked[pointedNode] = true; nMarked++; push(pointedNode->hookBranches());
    		}
    	public :
    		DFIterator() : pointedNode(0), nextToVisit(stack<Node<T>*>()), marked(map<Node<T>*,bool>), nMarked(0) {}
    		DFIterator(Node<T>* N) : DFIterator() {
    			if(N!=nullptr){
    				pointedNode = N;
    				markAndPush();
    			}
    		}
    		DFIterator(vector<Node<T>*>::iterator& i) : DFIterator() {
    			poitedNode = *i; markAndPush();
    		}
     
    		virtual DFIterator operator++(){
    			if (!pointedNode==0){
    					while(marked[nextToVisit.top()]&&(!nextToVisit.empty())){nextToVisit.pop();}
    					if(nextToVisit.empty()){pointedNode=0;}
    					else{
    						pointedNode=nextToVisit.top(); nextToVisit.pop();
    						markAndPush();
    					}
    			}
    			return *this;
    		}
    		Node<T>* operator *() {return pointedNode;}
    		virtual ~DFIterator{}
    	};
     
    	DFIterator beginDF() {if (!empty()) return DFIterator(*(nodes.begin())); return DFIterator();}
     
    	class BFIterator {
    		Node<T>* pointedNode;
    		queue<Node<T>*> nextToVisit;
    		map<Node<T>*,bool> marked;
    		int nMarked;
     
    		void push(const vector<Node<T>*>& v)
    		{for(int i=0;i<v.size();i++) nextToVisit.push(v[i]);}
    		void markAndPush()
    		{
    			marked[pointedNode] = true; nMarked++; push(pointedNode->hookBranches());
    		}
    	public :
    		BFIterator() : pointedNode(0), nextToVisit(queue<Node<T>*>()), marked(map<Node<T>*,bool>), nMarked(0) {}
    		BFIterator(Node<T>* N) : BFIterator() {
    			if(N!=nullptr){
    				pointedNode = N;
    				markAndPush();
    			}
    		}
    		BFIterator(vector<Node<T>*>::iterator& i) : BFIterator() {
    			pointedNode = *i; markAndPush();
    		}
     
    		virtual DFIterator operator++(){
    			if (!pointedNode==0){
    					while(marked[nextToVisit.front()]&&(!nextToVisit.empty())){nextToVisit.pop();}
    					if(nextToVisit.empty()){pointedNode=nullptr;}
    					else{
    						pointedNode=nextToVisit.front(); nextToVisit.pop();
    						markAndPush();
    					}
    			}
    			return *this;
    		}
    		Node<T>* operator *() {return pointedNode;}
    		virtual ~BFIterator {}
    	};
     
    	BFIterator beginBF() {if (!nodes.empty()) return BFIterator(*(nodes.begin())); return BFIterator();}
     
     
    };

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Quelle est ta version de gcc ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Par défaut
    4.8.1

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Par défaut
    Je viens d'essayer de remplacer tous les unordered_set par set et j'ai toujours le meme probleme :
    Symbol 'set' could not be resolved
    C'est un peu stressant la vu que c est pas une nouveauté de C++11 pourtant (me trompe je ?).

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Il me semble que -std=c0x c'est pour le draft du C++11, pour le C++11, c'est -std=c++11.

    Sinon, quand tu met ton std::set, est-ce que tu inclues bien #include<set> ?

    Tu aurais aussi pu nous donner un code minimal reproduisant ton erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include<unordered_set>
    using namespace std;
     
    template<typename T> class Node {
    };
     
    template<typename T> class Graph {
     
            unordered_set<Node<T>*> nodes; 
    };
     
     
    int main()
    {
            Graph<int> f;
    }
    Après tu aurais pu remplacer Node<T> * par un type primitif comme int pour vérifier si cela marche.
    Tu aurais alors remarqué qu'en cherchant la dernière erreur sur google :
    référence indéfinie vers « __gxx_personality_v0 »
    On te conseille d'utiliser g++ au lieu de gcc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gcc -std=c++11 main.cpp # devrait appeler g++ mais provoque l'erreur
    g++ -std=c++11 main.cpp
    Pour m'amuser j'ai aussi fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -x c++ -std=c++11 main.cpp
    Mais j'ai encore les même erreurs...
    Je pense que gcc utilise un éditeur de lien C-style et g++ un éditeur de lien un peu plus C++-style ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Par défaut
    Bon j'ai honte d'avouer d'ou venait mon probleme donc je vais le garder pour moi (aucun rapport avec une mauvaise utilisation de g++ mais une mauvaise utilisation d'eclipse).
    Neckara : je retiens ta demande au sujet du code minimal.
    Par contre, si je lis bien le man de gcc/g++ -std=c++0x et -std=c++11 correspondent a la même option mais le premier est 'deprecated'.

    Lié à mon code : finalement l'utilisation d'un set (quel qu'il soit) est finalement une très mauvaise idée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème basique avec un arbre
    Par StringBuilder dans le forum C#
    Réponses: 2
    Dernier message: 14/11/2011, 17h22
  2. Réponses: 11
    Dernier message: 04/06/2011, 02h45
  3. Réponses: 4
    Dernier message: 14/01/2011, 17h35
  4. Problème basique avec SoapUI 2.5.1
    Par squallJ dans le forum Services Web
    Réponses: 1
    Dernier message: 11/03/2009, 16h27
  5. problème JSP avec JBuilder et Weblogic 7
    Par viny dans le forum JBuilder
    Réponses: 2
    Dernier message: 24/04/2003, 08h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo