2016-04-13 10 views
0

Auf Kompilierung aufgerufen werden, erhalte ich dieseFehler: Verweis auf nicht-statische Member-Funktion muss

error: reference to non-static member function must be called 
         std::sort(sortedCOPG_.begin(),sortedCOPG_.end(),comp_copgNode); 

jemand lassen Kann mir als das, was ich falsch mache? Ich habe fast den gleichen Code ohne die Klassen versucht, aber dort hatte der Code keine Probleme. Es ist erst nachdem ich den Code in einer Klasse gekapselt habe. Ich habe viel Code entfernt, bevor ich hier poste, um die Dinge einfach zu halten. Ich habe andere ähnliche Beiträge ausprobiert, konnte aber keinen Sinn daraus machen.

#include <fstream> 
#include <set> 
#include <unordered_map> 

class Computation { 
    public: 

     Computation() { 

     } 

    private: 

     struct copgNode_ { 
      double weight; 
      int source; 
      int target; 
     }; 


     template <typename Iter> 
     void mst_score__(Iter first, Iter last) { 
      Iter current = first; 
      for (; current != last; ++current) { 
       for (int i=0; i < n_; ++i) { 
        if (adjMatrix_[*current][i] != 0) sortedCOPG_.push_back(copgNode_{adjMatrix_[*current][i],*current,i}); 
       } 
      } 
      //Here, is the line causing errors--- 
      std::sort(sortedCOPG_.begin(),sortedCOPG_.end(),comp_copgNode); 
     } 

     void m_init_computation__() { 

      std::vector<int> mst_test_vec{0,3,7}; 
      mst_score__(mst_test_vec.begin(),mst_test_vec.end()); 

    } 


     bool comp_copgNode (const copgNode_& left, const copgNode_& right) {return left.weight < right.weight;}  
};   
+3

'comp_copgNode' ist ein nicht-StatC Member-Funktion, können Sie nicht so darauf verweisen. (Wie würde "sortieren" wissen, an welchem ​​Objekt es aufgerufen wird?) Die einfachste Lösung wäre, die Funktion "statisch" zu machen, wenn sie nicht von einer bestimmten Instanz abhängt. –

+0

Woher kommt 'sortedCOPG'? – tadman

+0

@ M.M: Also sollte ich diesen Operator verwenden, um es zu referenzieren? – letsBeePolite

Antwort

0

Ermittelt den Fehler, musste die Vergleichsfunktion ersetzen. Wie wäre es die Sortierfunktion lassen, dass benutzerdefinierte Komparator zu identifizieren, überschreibt den Standard Komparator

friend bool operator< (const copgNode_& left, const copgNode_& right) {return left.weight < right.weight;} 
+0

alles, was Sie taten, war die Funktion 'operator <' anstelle von 'comp_copgNode' nennen, das macht keinen Unterschied. Putting 'Freund' war die" Lösung "(was auch für' comp_copgNode' funktioniert hätte) –

Verwandte Themen