2009-05-21 5 views
0

J'ai une classe et je voudrais utiliser la liste de bibliothèque standard pour stocker une liste d'entre eux. Je tiens essentiellement à push_front() la liste. Donc, mon code est comme ceci:Vous ne pouvez pas push_front() une liste de bibliothèque standard avec mes objets en C++

#include <list> 
/* ... lots of stuff ...*/ 

complexNode myObject(); 

std::list<complexNode> complexList(); 

myList.push_front(myObject); 

Mais le compilateur jette cette erreur:

erreur: demande de membre 'push_front' dans 'complexList', qui est de type non-classe « std :: liste < complexNode, std :: allocator < complexNode>>()() '

La classe complexeNode a un constructeur de copie.

Je ne comprends vraiment pas le problème et ce que cette erreur signifie réellement ... s'il vous plaît aider!

Répondre

6
std::list<complexNode> complexList(); 

ne devrait pas être ce:

std::list<complexNode> complexList; // without the() 
+2

Oui, avec le vide(), il est interprété comme une déclaration de fonction (!), Même s'il se trouve dans une portée locale. – bdonlan

+0

Oui, si vous utilisez "std :: list complexList();" le compilateur pense que vous déclarez une fonction complexList() renvoyant une liste std :: . – lothar

+0

Merci qui a fait l'affaire! :) –

4

Ce:

std::list<complexNode> complexList(); 

a le nom commun "C++'s most vexing parse". En résumé, vous avez fait complexList la déclaration d'une fonction qui retourne une liste, au lieu d'une variable locale. Supprimez le (), puis il ne peut pas être analysé en tant que fonction.

Questions connexes