Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/05/2008, à 23: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, à 23: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, à 23: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 18/05/2008, à 00:15)

Hors ligne

#4 Le 18/05/2008, à 18: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