j'ai trois une classe A qui a un constructeur par défaut et deux
constructeurs surchargés, ces deux derniers ont tous leurs paramètres
qui sont des paramètres par défauts.
cela itnerdit-il la déclaration d'objet suivante ?
A a;
j'ai un message d'erreur me disant en gros qu'il ne sait pas lequel
choisir...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Guillaume LEMAÎTRE
Nicolas Aunai wrote:
salut,
j'ai trois une classe A qui a un constructeur par défaut et deux constructeurs surchargés, ces deux derniers ont tous leurs paramètres qui sont des paramètres par défauts.
cela itnerdit-il la déclaration d'objet suivante ?
A a;
j'ai un message d'erreur me disant en gros qu'il ne sait pas lequel choisir...
Reprenons, et simplifions :
struct A {
A( void ) { ... }; A( int = 15 ) { ... }; };
A a;
Comment le compilateur pourrait-il résoudre ceci sachant que cela peut vouloir dire à la fois A() et A(15) ? Il faut soit ne plus avoir de constructeur par défaut, soit ne plus donner de valeur par défaut dans le constructur à un argument.
Nicolas Aunai wrote:
salut,
j'ai trois une classe A qui a un constructeur par défaut et deux
constructeurs surchargés, ces deux derniers ont tous leurs paramètres
qui sont des paramètres par défauts.
cela itnerdit-il la déclaration d'objet suivante ?
A a;
j'ai un message d'erreur me disant en gros qu'il ne sait pas lequel
choisir...
Reprenons, et simplifions :
struct A {
A( void ) { ... };
A( int = 15 ) { ... };
};
A a;
Comment le compilateur pourrait-il résoudre ceci sachant que cela peut
vouloir dire à la fois A() et A(15) ?
Il faut soit ne plus avoir de constructeur par défaut, soit ne plus
donner de valeur par défaut dans le constructur à un argument.
j'ai trois une classe A qui a un constructeur par défaut et deux constructeurs surchargés, ces deux derniers ont tous leurs paramètres qui sont des paramètres par défauts.
cela itnerdit-il la déclaration d'objet suivante ?
A a;
j'ai un message d'erreur me disant en gros qu'il ne sait pas lequel choisir...
Reprenons, et simplifions :
struct A {
A( void ) { ... }; A( int = 15 ) { ... }; };
A a;
Comment le compilateur pourrait-il résoudre ceci sachant que cela peut vouloir dire à la fois A() et A(15) ? Il faut soit ne plus avoir de constructeur par défaut, soit ne plus donner de valeur par défaut dans le constructur à un argument.
Anthony Fleury
Nicolas Aunai wrote:
salut,
Salut,
j'ai trois une classe A qui a un constructeur par défaut et deux constructeurs surchargés, ces deux derniers ont tous leurs paramètres qui sont des paramètres par défauts.
cela itnerdit-il la déclaration d'objet suivante ?
A a;
j'ai un message d'erreur me disant en gros qu'il ne sait pas lequel choisir...
Comme le dit le compilateur, il ne peut en effet pas choisir entre les trois... Si ta classe est ainsi :
class A { int a; public : A() {} ; A(int x = 42) : a(x) {} ; };
Un compilateur n'aura en effet aucun moyen de savoir lequel il doit appeler, et dans ce cas que mettre dans a. Le comportement qui paraitrait normal serait de prendre le constructeur sans paramètre, mais dans ce cas pourquoi avoir mis une valeur par défaut dans le constructeur recevant un entier ?
Cependant il aurait été interessant que tu postes ton code, car hormis dans le cas d'arguments de types différents, tu ne dois jamais rencontrer ce cas. Déjà, lorsque tu as un constructeur ayant toutes ses valeurs par défaut, tu n'as pas à avoir de constructeur par défaut, le premier est déjà ton constructeur par défaut.
Ensuite il faut savoir que si tu as ca par exemple :
class A { int a, b; public : A(int x = 42, int y = 42) : a(x) , b(y) {} ; };
Alors ta classe peut etre construite de trois valeurs différentes avec ce seul constructeur : A a; -> ici tu auras a = 42 et b = 42. A a(1); ici tu auras a = 1, b = 42. A a(1,2); ici tu auras a = 1 et b = 2.
Cet exemple est bien sûr assez bête mais ca fonctionne pareil dans un cas général. Tu n'as donc en toute logique aucune raison de te retrouver avec le message d'erreur sauf dans le cas où tu auras des types différents dans tes constructeurs, là ca dépend du cas.
Anthony -- "I should have seen it would be this way I should have known from the start what she's up to When you have loved and you've lost someone You know what it feels like to lose" -- The Rasmus
Nicolas Aunai wrote:
salut,
Salut,
j'ai trois une classe A qui a un constructeur par défaut et deux
constructeurs surchargés, ces deux derniers ont tous leurs paramètres
qui sont des paramètres par défauts.
cela itnerdit-il la déclaration d'objet suivante ?
A a;
j'ai un message d'erreur me disant en gros qu'il ne sait pas lequel
choisir...
Comme le dit le compilateur, il ne peut en effet pas choisir entre les
trois...
Si ta classe est ainsi :
class A {
int a;
public :
A() {} ;
A(int x = 42) : a(x) {} ;
};
Un compilateur n'aura en effet aucun moyen de savoir lequel il doit appeler,
et dans ce cas que mettre dans a. Le comportement qui paraitrait normal
serait de prendre le constructeur sans paramètre, mais dans ce cas pourquoi
avoir mis une valeur par défaut dans le constructeur recevant un entier ?
Cependant il aurait été interessant que tu postes ton code, car hormis dans
le cas d'arguments de types différents, tu ne dois jamais rencontrer ce
cas.
Déjà, lorsque tu as un constructeur ayant toutes ses valeurs par défaut, tu
n'as pas à avoir de constructeur par défaut, le premier est déjà ton
constructeur par défaut.
Ensuite il faut savoir que si tu as ca par exemple :
class A {
int a, b;
public :
A(int x = 42, int y = 42) : a(x) , b(y) {} ;
};
Alors ta classe peut etre construite de trois valeurs différentes avec ce
seul constructeur :
A a; -> ici tu auras a = 42 et b = 42.
A a(1); ici tu auras a = 1, b = 42.
A a(1,2); ici tu auras a = 1 et b = 2.
Cet exemple est bien sûr assez bête mais ca fonctionne pareil dans un cas
général.
Tu n'as donc en toute logique aucune raison de te retrouver avec le message
d'erreur sauf dans le cas où tu auras des types différents dans tes
constructeurs, là ca dépend du cas.
Anthony
--
"I should have seen it would be this way
I should have known from the start what she's up to
When you have loved and you've lost someone
You know what it feels like to lose" -- The Rasmus
j'ai trois une classe A qui a un constructeur par défaut et deux constructeurs surchargés, ces deux derniers ont tous leurs paramètres qui sont des paramètres par défauts.
cela itnerdit-il la déclaration d'objet suivante ?
A a;
j'ai un message d'erreur me disant en gros qu'il ne sait pas lequel choisir...
Comme le dit le compilateur, il ne peut en effet pas choisir entre les trois... Si ta classe est ainsi :
class A { int a; public : A() {} ; A(int x = 42) : a(x) {} ; };
Un compilateur n'aura en effet aucun moyen de savoir lequel il doit appeler, et dans ce cas que mettre dans a. Le comportement qui paraitrait normal serait de prendre le constructeur sans paramètre, mais dans ce cas pourquoi avoir mis une valeur par défaut dans le constructeur recevant un entier ?
Cependant il aurait été interessant que tu postes ton code, car hormis dans le cas d'arguments de types différents, tu ne dois jamais rencontrer ce cas. Déjà, lorsque tu as un constructeur ayant toutes ses valeurs par défaut, tu n'as pas à avoir de constructeur par défaut, le premier est déjà ton constructeur par défaut.
Ensuite il faut savoir que si tu as ca par exemple :
class A { int a, b; public : A(int x = 42, int y = 42) : a(x) , b(y) {} ; };
Alors ta classe peut etre construite de trois valeurs différentes avec ce seul constructeur : A a; -> ici tu auras a = 42 et b = 42. A a(1); ici tu auras a = 1, b = 42. A a(1,2); ici tu auras a = 1 et b = 2.
Cet exemple est bien sûr assez bête mais ca fonctionne pareil dans un cas général. Tu n'as donc en toute logique aucune raison de te retrouver avec le message d'erreur sauf dans le cas où tu auras des types différents dans tes constructeurs, là ca dépend du cas.
Anthony -- "I should have seen it would be this way I should have known from the start what she's up to When you have loved and you've lost someone You know what it feels like to lose" -- The Rasmus