Pages : 1
#1 Le 17/05/2008, à 22:27
- TatrefThekiller
Question débutant C++
Salut à tous !
J'essaie d'implémenter une classe pile en C++ (je débute...).
Voici la partie de mon fichier pile.cpp qui m'intéresse :
pile::pile()
{
valeur = 0;
suivant = NULL;
}
pile::pile(int a)
{
valeur = a;
suivant = NULL;
}
Et le .h associé :
class pile{
public:
int valeur;
pile *suivant;
pile();
pile(int);
~pile();
void afficher();
private:
};
Tout commentaire sur le code est le bienvenu !!
Voici mon problème :
Si je fais dans le main :
pile p();
p.valeur = 1;
J'obtiens l'erreur suivant à la compilation (au niveau de p.valeur = 1):
erreur: request for member «suivant» in «p1», which is of non-class type «pile ()()»|
Cette erreur n'est pas présente si j'utilise "pile p(1)" pour créer la pile...
Je ne vois pas d'où viens l'erreur, puisque le code est très semblable.
Merci pour votre aide !
Hors ligne
#2 Le 17/05/2008, à 22:46
- Link31
Re : Question débutant C++
pile p() déclare une fonction p() qui renvoie un objet pile, et pas un objet pile.
--- main.cpp.orig 2008-05-17 23:42:41.632109249 +0200
+++ main.cpp 2008-05-17 23:42:44.473557883 +0200
@@ -2,7 +2,7 @@
int main()
{
- pile p();
+ pile p;
p.valeur = 1;
return 0;
}
Hors ligne
#3 Le 17/05/2008, à 22:52
- TatrefThekiller
Re : Question débutant C++
Merci !
Je trouve la syntaxe pas terrible par rapport au java...:(
En java on peux faire ça :
pile p = new pile() // Constructeur par défaut
pile p = new pile(1) // Constructeur avec un paramètre
Apparemment, avec un "pile p", le constructeur par défaut est appelé automatiquement.
Y a-t-il une différence entre "pile p" et "pile p = new pile" et "pile p = new pile()" ?
EDIT : Apparemment non, mais il faut utiliser des pointeurs :
pile* p = new pile();
pile* p = new pile; // Même résultat
Dernière modification par TatrefThekiller (Le 17/05/2008, à 23:15)
Hors ligne
#4 Le 18/05/2008, à 17:45
- Anium
Re : Question débutant C++
Effectivement, mais si tu passes par des pointeurs, penses à libérer la mémoire (dans le destructeur en général).
Hors ligne
Pages : 1