2017-04-18 1 views
0

In Klasse-Manager Ich habe diese Methoden obcjects. Klasse Welt enthält:Sortieren Vektor von Zeigern nach dem Wert der Eigenschaft dieser Objekte

vector<Element*> elements; 
vector<Element*> World::GetElementss() 
{ 
    return this->elements; 
} 

Klasse Element enthält:

int Id; 

Ich habe 2 Fragen:

  1. Warum es nicht funktioniert? Ich habe folgenden Fehler: "Fehler C2065 'compareById': nicht deklarierte Kennung"

  2. Schließlich möchte ich Id (in der Klasse Element) private und Rückgabewert dieses Feldes durch öffentliche Methode GetId(). Es ist illigal, wenn ich diese Methode auf const-Objekt ausführen möchte, also habe ich keine Ahnung, was ich tun kann, um diese Vektoren unter diesen Bedingungen zu sortieren.

Antwort

1

I have following error: "Error C2065 'compareById': undeclared identifier"

Wie immer compareById müssen, bevor Sie es verwenden, deklariert werden. (Es sei denn, es ist ein Mitglied der gleichen Klasse als in-Class-Funktion, aber es scheint nicht ein Klassenmitglied überhaupt zu sein.)

It is illigal when i want to execute this method on const object

Klingt wie Sie müssen nur Ihre Funktion ein konstantes Element machen Funktion. Erklären Sie es wie

int GetId() const; 

und Sie dürfen es nennen auf const Objekte.

+0

Dieser Fehler wurde tatsächlich durch falsche Reihenfolge verursacht. Aber jetzt, wenn ich SortElementsById() Methode ausführen, habe ich Laufzeitfehler: "Ausdruck: Vektor Iterator inkompatibel". – Sigger

+0

Das ist, weil 'GetElements()' eine Kopie des Vektors zurückgibt, nicht den gleichen Vektor, also 'world-> GetElements(). Begin()' und 'world-> GetElements(). End()' sind Iteratoren von zwei verschiedene Vektoren. 'GetElements()' sollte als Referenz zurückgegeben werden. – aschepler

+0

Ich habe alle meine Probleme gelöst, vielen Dank. – Sigger

Verwandte Themen