Constructeurs surchargés et erreur d'accès aux membres de la classe
Considérons une classe avec deux constructeurs, un sans argument et un autre avec un seul argument entier. Lors de la création d'objets à l'aide de ce dernier constructeur fonctionne comme prévu, l'utilisation du constructeur sans argument entraîne une erreur.
Par exemple, la compilation de l'extrait de code suivant :
class Foo { public: Foo() {}; Foo(int a) {}; void bar() {}; }; int main() { // This works... Foo foo1(1); foo1.bar(); // This fails... Foo foo2(); foo2.bar(); return 0; }
génère l'erreur suivante :
error: request for member 'bar' in 'foo2', which is of non-class type 'Foo ()()'
Cette erreur se produit car le compilateur interprète le code Foo foo2(); comme déclaration de fonction avec le nom 'foo2' et le type de retour 'Foo'. Cependant, vous avez l'intention d'instancier un objet de type 'Foo' avec le constructeur sans argument.
Pour résoudre ce problème, modifiez Foo foo2(); à Foo foo2;. Ce changement informe le compilateur que vous souhaitez créer un objet en utilisant le constructeur par défaut.
Vous pouvez également rencontrer une erreur indiquant une ambiguïté dans les constructeurs surchargés en raison de la présence à la fois des constructeurs sans argument et avec un seul argument. . Dans de tels cas, invoquer explicitement le constructeur sans argument en utilisant Foo foo2{}; résoudra l'ambiguïté.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!