2016-04-11 22 views
-1

Ich versuche eine Nodeliste zu erstellen und ich habe zwei Klassen: Node & Nodelist. Der Konstruktor von Knoten sieht wie folgt aus:C++: Speichern von Klassenobjekten in einer Map (Fehler: Nehme die Adresse eines temporären Objekts vom Typ 'Node')

Node::Node(int identifier, bool weighted){ 
    ID_ = identifier; 
    numberOfConnections_ = 0; 
    weighted_ = weighted; 
} 

Wenn ich versuche, eine Verbindung zwischen den Knoten mit dieser Methode hinzufügen:

void Nodelist::addOneWayConnection(int source, int target){ 
    connections_[source] = &Node(source, weightedlist_); <-- error 
    connections_[target] = &Node(source, weightedlist_); <-- error 
    connections_[source]->addConnection(connections_[target]); 
} 

ich den Fehler:

error: taking the address of a temporary object of type 'Node'

Wie Ich speichere eine Referenz zur Klasse Node?

Vielen Dank im Voraus!

+0

Wie ist 'connections_' definiert? Mehr als wahrscheinlich ist Ihre Lösung, die & loszuwerden. – NathanOliver

+0

Std :: Karte Verbindungen_; –

+0

Sie müssen bestimmten Platz für Ihre Quelle und Ihr Ziel angeben. –

Antwort

1

Sie möchten keinen Verweis darauf speichern. Es hört auf nach dem Ausdruck zu existieren. Es ist "temporär", wie der Fehler es dir sagt. Sie sollten Knoten entweder direkt speichern oder einen Zeiger speichern und new verwenden, um sie zuzuweisen.

Edit: von Ihrem Kommentar Ich habe festgestellt, dass Connections_ tatsächlich einen Zeiger erwartet (wie gesagt, Sie könnten oben verwenden). Sie müssen neue Knoten zuweisen.

connections_[source] = new Node(source, weightedlist_); 
connections_[target] = new Node(source, weightedlist_); 
+1

Vergessen Sie nicht zu erwähnen, dass sie Bereinigungscode haben müssen, um diese Zeiger zu löschen, wenn sie fertig sind. Ansonsten kommt hier die Speicherlecks. – NathanOliver