Maison > développement back-end > C++ > Pourquoi 'Foo foo2();' Causer une erreur « Demande de membre dans un type non-classe » ?

Pourquoi 'Foo foo2();' Causer une erreur « Demande de membre dans un type non-classe » ?

Barbara Streisand
Libérer: 2024-12-01 01:22:11
original
472 Les gens l'ont consulté

Why Does

Erreurs d'invocation de constructeur : compréhension de la « Demande de membre dans un type non-classe »

Lors de l'instanciation d'objets avec des paramètres de constructeur spécifiques, les programmeurs peuvent rencontrer l'erreur "demande de membre '..' dans '..' qui est de type non-classe." Comprendre la source de cette erreur est crucial pour la résoudre efficacement.

L'exemple de code fourni illustre le problème. La classe Foo possède deux constructeurs : un constructeur par défaut sans argument et un constructeur qui accepte un seul paramètre entier. Instanciation de foo1 à l'aide des fonctions de constructeur paramétrées comme prévu. Cependant, l'invocation du constructeur par défaut entraîne une erreur de compilation.

Pourquoi cela se produit-il ? La syntaxe

Foo foo2();
Copier après la connexion

se prend à tort comme une déclaration de fonction. Le compilateur le perçoit comme déclarant une fonction nommée foo2 avec un type de retour Foo, attendant des arguments basés sur les parenthèses. Cependant, l'intention est d'instancier un objet nommé foo2 en utilisant le constructeur par défaut, qui ne prend aucun argument.

Par conséquent, le compilateur désigne foo2 comme un type non-classe nommé Foo(). Cette désignation empêche l'accès aux méthodes définies au sein de la classe Foo, rendant ainsi invalide l'invocation de foo2.bar().

Pour rectifier cette erreur, la syntaxe doit être ajustée à :

Foo foo2;
Copier après la connexion

En omettant les parenthèses, le compilateur interprète

Foo foo2
Copier après la connexion

comme une déclaration d'objet de foo2 en utilisant le constructeur par défaut. Cela instanciera avec succès un objet de type Foo, permettant l'accès à ses fonctions membres, y compris bar().

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