PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Referenz: g++ kompiliert nicht



STEVMASTER
26-03-2005, 21:26
Habe folgende Funktionsdefinition(bzw. Konstruktor meiner Klasse Way):
Way(std::list<Node*>& node_list);

später erstelle ich eine neue Instanz der Klasse Way:
Way* way = new Way(first_way->getNodeList()); //getNodeList() liefert std::list<Node*> zurück...

der Compiler weigert sich das zu kompilieren, dazu steht:

pathfinder.cc:92: error: no matching function for call to `Way::Way(
std::list<Node*, std::allocator<Node*> >)'
way.h:9: error: candidates are: Way::Way(const Way&)
way.h:15: error: Way::Way(std::list<Node*,
std::allocator<Node*> >&)
way.h:14: error: Way::Way()

Ich hatte schon öfters das Problem, da bin ich das einfach umgangen indem ich die Referenz durch einen richtigen Zeiger als Parameter der Funktion übergeben habe...
Da Referenzen aber eine sauberere Lösung sind als Zeiger will ich wissen wo der Fehler liegt
->darf man bei Template-Klassen wie list keine Referenzen verwenden?
->oder ist es ein Bug im g++ (Version: 3.3.3, Suse 9.1)

thx schonma

STEVMASTER
26-03-2005, 22:03
hab' das Problem lösen können:
list<Node*> n_list = first_way->getNodeList();
Way* way = new Way(n_list);

Ist das Teil der C++-Spezifikation, dass Rückgabewerte von Funktionen nicht als Referenz übergeben werden dürfen???

locus vivendi
28-03-2005, 10:01
Ist das Teil der C++-Spezifikation, dass Rückgabewerte von Funktionen nicht als Referenz übergeben werden dürfen???
Rückgabewerte von Funktionen dürfen Referenzen sein. Abgesehen davon gilt:
Nichts genaues weiß man nicht, weil du viel zu wenig relevanten Code gepostet hast.

Ich erlaube mir aber die Vermutung, daß es daran liegt das du in deinem ersten Snippet versuchst, ein Rvalue an eine nicht konstante Referenz zu binden. Das ist verboten.

STEVMASTER
28-03-2005, 10:52
Korrekt, danke...