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
Libérer: 2024-12-08 21:26:11
original
533 Les gens l'ont consulté

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;
}
Copier après la connexion

génère l'erreur suivante :

error: request for member 'bar' in 'foo2', which is of non-class type 'Foo ()()'
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal