Maison >développement back-end >C++ >Pourquoi mon constructeur sans argument provoque-t-il une erreur « Demande de membre » ?

Pourquoi mon constructeur sans argument provoque-t-il une erreur « Demande de membre » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-08 21:26:11584parcourir

Why Does My No-Argument Constructor Cause a

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn