Ich verwende eine STL priority_queue
und geben Sie eine benutzerdefinierte Komparator-Klasse, deren Konstruktor den Zeiger auf den Vektor übernimmt, der die Prioritäten speichert, so -Fehler: Anforderung für Mitglied '..' in '..', die von Nicht-Klassen-Typ ist
#include <iostream>
#include <queue> // std::priority_queue
#include <vector> // std::vector
using namespace std;
class CompareReachDist
{
const vector<float> *reach_dists;
public:
CompareReachDist(const vector<float> *input)
{
reach_dists = input;
}
bool operator() (const size_t &l, const size_t &r) const
{
return (reach_dists->at(l) > reach_dists->at(r));
}
};
typedef priority_queue<size_t, vector<size_t>, CompareReachDist> pq;
vector<float> reach_dists;
int main()
{
pq seeds(CompareReachDist(&reach_dists));
bool isEmpty = seeds.empty();
return 0;
}
jedoch zum Kompilieren erhalte ich die Fehlermeldung:
error: request for member 'empty' in 'seeds', which is of non-class type 'pq(CompareReachDist&) {aka std::priority_queue<unsigned int std::vector<unsigned int>, CompareReachDist>(CompareReachDist&)}'
Wo ich falsch gehe?
Ah, ja. Ich sehe es jetzt. Wie denken Sie, sollte ich meine Objektdeklaration so umstrukturieren, dass der Compiler sie nicht mehr für eine Funktionsdeklaration verwendet? –
@ ameya.dubey - Nun, bevorzugen Sie C++ 11 Initialisierungssyntax. Oder führen Sie eine benannte Variable für den Parameter 'CompareReachDist' ein. – StoryTeller
@ ameya.dubey - Tatsächlich tust du es. Freut mich, Ihnen behilflich zu sein. – StoryTeller