2010-09-19 4 views
2

Je suis en train de remplacer l'opérateur < comme suit:comment remplacer l'opérateur <

intérieur Noeud:

bool operator <(const Node* other) { 
    return *(this->GetData()) < *(other->GetData()); 
} 

intérieur du véhicule:

bool operator <(const Vehicle &other) { 
    return this->GetKilometersLeft() < other.GetKilometersLeft(); 
} 

invoquant l'opérateur:

while (index > 0 && m_heapVector[index] < m_heapVector[parent(index)]) 

définition de vecteur:

vector<Node<T>*> m_heapVector; 

J'ai vérifié l'appel et il n'appelle pas les opérateurs substitués.

Répondre

4

c'est parce que vous comparez des pointeurs,

Vous devez le faire:

*m_heapVector[index] < *m_heapVector[parent(index)] 

et ajuster en conséquence l'opérateur

bool operator<(const Node &other) const; 
+0

me devança. "Ajuster l'opérateur en conséquence" signifie "Node :: operator <()' devrait prendre une référence, pas un pointeur, à 'other'. –

+0

@Ben aucun problème, opérateur fixe – Anycorn

+0

@Roy, l'opérateur de notification devrait être '(const Node & other)' – Anycorn

Questions connexes