Test tata; //erreur a la compilation
Test toto();
Test titi(5);
Bon pour le probleme de tata je pense avoir compris : en créant le
constructeur a un parametre, on perd le constructeur par defaut, oui
mais c'est quand meme bizare, je vais y venir.
Mon probleme est que la ligne Test toto(); semble ne pas etre éxécutée.
j'utilise VC 2003 et lorsque je débug apres avoir placé un point d'arret
sur Test toto(); le programme se met en pause sur l'instruction
suivante, comme si Test toto(); ne comprennait aucune instruction.
j'ai égallement placé un point d'arret a l'interieur du constructeur,
pour etre sur de savoir quand il est lancé, or, seul Test titi(5) semble
l'appeller.
et pour finir dans le debuggeur "variable locales" seul titi apparait.
alors je ne comprends pas pourquoi Test toto() n'appelle pas le
constructeur avec un parametre par defaut ???
pourquoi la ligne semble ignorée sans qu'on m'avertisse de quoi que ce
soit lors la compil ou lors du debuggage? Je veux dire, soit le
compilateur me jete, soit le programme plante, soit il me construit
toto, mais la vraiment j'ai rien !!!
idem pour Test tata; pourquoi ne peut on pas "traduire" cette ligne par
Test tata(int num=1) soit => Test tata(1); ???
merci d'avance pour les lumieres que vous allez m'apporter.
Test tata; //erreur a la compilation Test toto(); Test titi(5);
Tu peux donner un Exemple Compilable et Minimum? (non, on n'est pas dans fctt mais c'est quand meme valable partout.)
Bon pour le probleme de tata je pense avoir compris : en créant le constructeur a un parametre, on perd le constructeur par defaut, oui mais c'est quand meme bizare, je vais y venir.
Mon probleme est que la ligne Test toto(); semble ne pas etre éxécutée.
Ca devrait etre dans la FAQ... C'est une declaration pour une fonction nommee toto sans parametres qui retourne un Test. Il y a des cas encore plus piegeux de cette regle ou la fonction declaree peut prendre des parametres.
idem pour Test tata; pourquoi ne peut on pas "traduire" cette ligne par Test tata(int num=1) soit => Test tata(1); ???
class Test { public: Test(int num); };
Test::Test(int num = 1) { }
void f() { Test tata; }
Compile chez moi sans probleme. On commence donc les devinettes, tu n'est pas dans le fichier qui contient l'implementation et donc l'argument par defaut n'est pas vu.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
giova <pas@de.mail> writes:
bonjour
j'ai une classe Test avec (disons) un simple constructeur :
Test tata; //erreur a la compilation
Test toto();
Test titi(5);
Tu peux donner un Exemple Compilable et Minimum? (non, on n'est pas
dans fctt mais c'est quand meme valable partout.)
Bon pour le probleme de tata je pense avoir compris : en créant le
constructeur a un parametre, on perd le constructeur par defaut, oui mais
c'est quand meme bizare, je vais y venir.
Mon probleme est que la ligne Test toto(); semble ne pas etre
éxécutée.
Ca devrait etre dans la FAQ... C'est une declaration pour une fonction
nommee toto sans parametres qui retourne un Test. Il y a des cas
encore plus piegeux de cette regle ou la fonction declaree peut
prendre des parametres.
idem pour Test tata; pourquoi ne peut on pas "traduire" cette ligne par
Test tata(int num=1) soit => Test tata(1); ???
class Test
{
public:
Test(int num);
};
Test::Test(int num = 1) {
}
void f() {
Test tata;
}
Compile chez moi sans probleme. On commence donc les devinettes, tu
n'est pas dans le fichier qui contient l'implementation et donc
l'argument par defaut n'est pas vu.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Test tata; //erreur a la compilation Test toto(); Test titi(5);
Tu peux donner un Exemple Compilable et Minimum? (non, on n'est pas dans fctt mais c'est quand meme valable partout.)
Bon pour le probleme de tata je pense avoir compris : en créant le constructeur a un parametre, on perd le constructeur par defaut, oui mais c'est quand meme bizare, je vais y venir.
Mon probleme est que la ligne Test toto(); semble ne pas etre éxécutée.
Ca devrait etre dans la FAQ... C'est une declaration pour une fonction nommee toto sans parametres qui retourne un Test. Il y a des cas encore plus piegeux de cette regle ou la fonction declaree peut prendre des parametres.
idem pour Test tata; pourquoi ne peut on pas "traduire" cette ligne par Test tata(int num=1) soit => Test tata(1); ???
class Test { public: Test(int num); };
Test::Test(int num = 1) { }
void f() { Test tata; }
Compile chez moi sans probleme. On commence donc les devinettes, tu n'est pas dans le fichier qui contient l'implementation et donc l'argument par defaut n'est pas vu.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Fabien LE LEZ
On Fri, 21 May 2004 14:28:28 +0200, giova wrote:
j'ai une classe Test avec (disons) un simple constructeur :
Test tata; //erreur a la compilation Test toto(); Test titi(5);
Bon pour le probleme de tata je pense avoir compris : en créant le constructeur a un parametre, on perd le constructeur par defaut, oui mais c'est quand meme bizare, je vais y venir.
Le code suivant marche très bien (VC 7.1) :
#include <iostream>
class Test { public: Test(int t = 1) : t_(t) { std::cout<<t_<<"n"; }
private: int t_; };
int main() { Test t1; Test t2(2); }
et affiche :
*** constructeur : 1 constructeur : 2 ***
Je ne comprends pas l'erreur de compilation de ta première ligne. Ca vient sans doute du reste du code. Quant à la deuxième ligne, c'est une erreur classique et pas évidente au premier abord :
Test toto();
est analysée comme une déclaration de fonction (paramètre void, retourne Test). D'ailleurs le compilateur le dit, le bougre (warning level=4).
Patrick Mézard
giova wrote:
bonjour
j'ai une classe Test avec (disons) un simple constructeur :
Test tata; //erreur a la compilation
Test toto();
Test titi(5);
Bon pour le probleme de tata je pense avoir compris : en créant le
constructeur a un parametre, on perd le constructeur par defaut, oui
mais c'est quand meme bizare, je vais y venir.
Le code suivant marche très bien (VC 7.1) :
#include <iostream>
class Test
{
public:
Test(int t = 1) : t_(t)
{
std::cout<<t_<<"n";
}
private:
int t_;
};
int main()
{
Test t1;
Test t2(2);
}
et affiche :
***
constructeur : 1
constructeur : 2
***
Je ne comprends pas l'erreur de compilation de ta première ligne. Ca
vient sans doute du reste du code. Quant à la deuxième ligne, c'est une
erreur classique et pas évidente au premier abord :
Test toto();
est analysée comme une déclaration de fonction (paramètre void, retourne
Test). D'ailleurs le compilateur le dit, le bougre (warning level=4).
Test tata; //erreur a la compilation Test toto(); Test titi(5);
Bon pour le probleme de tata je pense avoir compris : en créant le constructeur a un parametre, on perd le constructeur par defaut, oui mais c'est quand meme bizare, je vais y venir.
Le code suivant marche très bien (VC 7.1) :
#include <iostream>
class Test { public: Test(int t = 1) : t_(t) { std::cout<<t_<<"n"; }
private: int t_; };
int main() { Test t1; Test t2(2); }
et affiche :
*** constructeur : 1 constructeur : 2 ***
Je ne comprends pas l'erreur de compilation de ta première ligne. Ca vient sans doute du reste du code. Quant à la deuxième ligne, c'est une erreur classique et pas évidente au premier abord :
Test toto();
est analysée comme une déclaration de fonction (paramètre void, retourne Test). D'ailleurs le compilateur le dit, le bougre (warning level=4).
Patrick Mézard
giova
Fabien LE LEZ wrote:
On Fri, 21 May 2004 14:28:28 +0200, giova wrote:
j'ai une classe Test avec (disons) un simple constructeur :
Test tata; //erreur a la compilation Test toto(); Test titi(5);
Tu peux donner un Exemple Compilable et Minimum? (non, on n'est pas dans fctt mais c'est quand meme valable partout.)
Bon pour le probleme de tata je pense avoir compris : en créant le constructeur a un parametre, on perd le constructeur par defaut, oui mais c'est quand meme bizare, je vais y venir.
Mon probleme est que la ligne Test toto(); semble ne pas etre éxécutée.
Ca devrait etre dans la FAQ... C'est une declaration pour une fonction nommee toto sans parametres qui retourne un Test. Il y a des cas encore plus piegeux de cette regle ou la fonction declaree peut prendre des parametres.
idem pour Test tata; pourquoi ne peut on pas "traduire" cette ligne par Test tata(int num=1) soit => Test tata(1); ???
class Test { public: Test(int num); };
Test::Test(int num = 1) { }
void f() { Test tata; }
Compile chez moi sans probleme. On commence donc les devinettes, tu n'est pas dans le fichier qui contient l'implementation et donc l'argument par defaut n'est pas vu.
A+
donc si je comprends bien, pour déclarer dans la pile un objet de type
Test en appellant le constructeur sans parametre (ou celui avec un seul parametre par defaut) je dois ecrire (et c'est la seule syntaxe possible) : Test toto;
en revanche si j'avais voulu créer l'objet sur le tas, j'aurais pu l'ecrire :
Test* toto = new Test; ou bien : Test* toto = new Test();
je me trompe?
Jean-Marc Bourguet wrote:
giova <pas@de.mail> writes:
bonjour
j'ai une classe Test avec (disons) un simple constructeur :
Test tata; //erreur a la compilation
Test toto();
Test titi(5);
Tu peux donner un Exemple Compilable et Minimum? (non, on n'est pas
dans fctt mais c'est quand meme valable partout.)
Bon pour le probleme de tata je pense avoir compris : en créant le
constructeur a un parametre, on perd le constructeur par defaut, oui mais
c'est quand meme bizare, je vais y venir.
Mon probleme est que la ligne Test toto(); semble ne pas etre
éxécutée.
Ca devrait etre dans la FAQ... C'est une declaration pour une fonction
nommee toto sans parametres qui retourne un Test. Il y a des cas
encore plus piegeux de cette regle ou la fonction declaree peut
prendre des parametres.
idem pour Test tata; pourquoi ne peut on pas "traduire" cette ligne par
Test tata(int num=1) soit => Test tata(1); ???
class Test
{
public:
Test(int num);
};
Test::Test(int num = 1) {
}
void f() {
Test tata;
}
Compile chez moi sans probleme. On commence donc les devinettes, tu
n'est pas dans le fichier qui contient l'implementation et donc
l'argument par defaut n'est pas vu.
A+
donc si je comprends bien, pour déclarer dans la pile un objet de type
Test en appellant le constructeur sans parametre (ou celui avec un seul
parametre par defaut) je dois ecrire (et c'est la seule syntaxe possible) :
Test toto;
en revanche si j'avais voulu créer l'objet sur le tas, j'aurais pu
l'ecrire :
Test* toto = new Test;
ou bien :
Test* toto = new Test();
Test tata; //erreur a la compilation Test toto(); Test titi(5);
Tu peux donner un Exemple Compilable et Minimum? (non, on n'est pas dans fctt mais c'est quand meme valable partout.)
Bon pour le probleme de tata je pense avoir compris : en créant le constructeur a un parametre, on perd le constructeur par defaut, oui mais c'est quand meme bizare, je vais y venir.
Mon probleme est que la ligne Test toto(); semble ne pas etre éxécutée.
Ca devrait etre dans la FAQ... C'est une declaration pour une fonction nommee toto sans parametres qui retourne un Test. Il y a des cas encore plus piegeux de cette regle ou la fonction declaree peut prendre des parametres.
idem pour Test tata; pourquoi ne peut on pas "traduire" cette ligne par Test tata(int num=1) soit => Test tata(1); ???
class Test { public: Test(int num); };
Test::Test(int num = 1) { }
void f() { Test tata; }
Compile chez moi sans probleme. On commence donc les devinettes, tu n'est pas dans le fichier qui contient l'implementation et donc l'argument par defaut n'est pas vu.
A+
donc si je comprends bien, pour déclarer dans la pile un objet de type
Test en appellant le constructeur sans parametre (ou celui avec un seul parametre par defaut) je dois ecrire (et c'est la seule syntaxe possible) : Test toto;
en revanche si j'avais voulu créer l'objet sur le tas, j'aurais pu l'ecrire :
Test* toto = new Test; ou bien : Test* toto = new Test();
je me trompe?
giova
Fabien LE LEZ wrote:
On Fri, 21 May 2004 14:47:17 +0200, giova wrote:
Ceci est une déclaration de fonction, rien à voir avec la création d'un objet.
tu veux dire que c'est intéprété comme etant un prototype plutot non?
C'est bien ce que j'ai dit. oui pardon, j'avoue etre encore un peu embrouillé entre déclaraion et
définition, ca rentre lentement :)
Fabien LE LEZ wrote:
On Fri, 21 May 2004 14:47:17 +0200, giova <pas@de.mail> wrote:
Ceci est une déclaration de fonction, rien à voir avec la création
d'un objet.
tu veux dire que c'est intéprété comme etant un prototype plutot non?
C'est bien ce que j'ai dit.
oui pardon, j'avoue etre encore un peu embrouillé entre déclaraion et
Ceci est une déclaration de fonction, rien à voir avec la création d'un objet.
tu veux dire que c'est intéprété comme etant un prototype plutot non?
C'est bien ce que j'ai dit. oui pardon, j'avoue etre encore un peu embrouillé entre déclaraion et
définition, ca rentre lentement :)
Jean-Marc Bourguet
giova writes:
donc si je comprends bien, pour déclarer dans la pile un objet de type Test en appellant le constructeur sans parametre (ou celui avec un seul parametre par defaut)
Pour autant que le fait qu'il y a un parametre par defaut soit visible a cet endroit
je dois ecrire (et c'est la seule syntaxe possible) : Test toto;
Effectivement.
Test toto = Test();
a le meme effet mais appelle le constructeur par defaut puis le constructeur de copie puis le destructeur avec autorisation pour le compilateur d'utiliser le constructeur par defaut uniquement (mais pas l'autorisation de sauter le test d'accessibilite du constructeur de copie).
en revanche si j'avais voulu créer l'objet sur le tas, j'aurais pu l'ecrire:
Test* toto = new Test; ou bien : Test* toto = new Test();
je me trompe?
Non. En complement, dans les listes d'initialisation, toto() indique bien l'appel au constructeur par defaut.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
giova <pas@de.mail> writes:
donc si je comprends bien, pour déclarer dans la pile un objet de type Test
en appellant le constructeur sans parametre (ou celui avec un seul
parametre par defaut)
Pour autant que le fait qu'il y a un parametre par defaut soit visible
a cet endroit
je dois ecrire (et c'est la seule syntaxe possible) :
Test toto;
Effectivement.
Test toto = Test();
a le meme effet mais appelle le constructeur par defaut puis le
constructeur de copie puis le destructeur avec autorisation pour le
compilateur d'utiliser le constructeur par defaut uniquement (mais pas
l'autorisation de sauter le test d'accessibilite du constructeur de
copie).
en revanche si j'avais voulu créer l'objet sur le tas, j'aurais pu l'ecrire:
Test* toto = new Test;
ou bien :
Test* toto = new Test();
je me trompe?
Non. En complement, dans les listes d'initialisation,
toto()
indique bien l'appel au constructeur par defaut.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
donc si je comprends bien, pour déclarer dans la pile un objet de type Test en appellant le constructeur sans parametre (ou celui avec un seul parametre par defaut)
Pour autant que le fait qu'il y a un parametre par defaut soit visible a cet endroit
je dois ecrire (et c'est la seule syntaxe possible) : Test toto;
Effectivement.
Test toto = Test();
a le meme effet mais appelle le constructeur par defaut puis le constructeur de copie puis le destructeur avec autorisation pour le compilateur d'utiliser le constructeur par defaut uniquement (mais pas l'autorisation de sauter le test d'accessibilite du constructeur de copie).
en revanche si j'avais voulu créer l'objet sur le tas, j'aurais pu l'ecrire:
Test* toto = new Test; ou bien : Test* toto = new Test();
je me trompe?
Non. En complement, dans les listes d'initialisation, toto() indique bien l'appel au constructeur par defaut.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Michel Michaud
Dans news:, Fabien LE
On Fri, 21 May 2004 14:47:17 +0200, giova wrote:
Ceci est une déclaration de fonction, rien à voir avec la création d'un objet.
tu veux dire que c'est intéprété comme etant un prototype plutot non?
C'est bien ce que j'ai dit.
Sauf que C++ ne connaît pas les « prototypes » (ce mot n'est pas utilisé dans la norme, on parle simplement de déclaration).
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Dans news:rkura0h2b37ogn1iddc8it5sh69c5pdk9t@4ax.com, Fabien LE
On Fri, 21 May 2004 14:47:17 +0200, giova <pas@de.mail> wrote:
Ceci est une déclaration de fonction, rien à voir avec la
création d'un objet.
tu veux dire que c'est intéprété comme etant un prototype
plutot non?
C'est bien ce que j'ai dit.
Sauf que C++ ne connaît pas les « prototypes » (ce mot n'est
pas utilisé dans la norme, on parle simplement de déclaration).
--
Michel Michaud mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/