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();
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;
En omettant les parenthèses, le compilateur interprète
Foo foo2
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!