Erreur C ++ Une référence de membre non statique doit être relative à un objet spécifique

Erreur C ++ Une référence de membre non statique doit être relative à un objet spécifique
Aujourd'hui, nous discuterons d'une erreur qui peut se produire en raison d'un manque de pratique d'un programmeur lorsqu'il mélange le concept de fonctions statiques et non statiques. Étudons d'abord les fonctions des membres non statiques. Ce sont le type de fonctions qui sont déclarées dans la zone de spécification des membres d'une classe sans aucun spécificateur statique. Pour les membres non statiques, il existe une méthode spéciale pour la déclaration. En C ++, si nous devons appeler une fonction à partir de n'importe quelle classe, nous pouvons l'appeler en créant un objet. S'il s'agit du membre statique, alors il sera appelé par les doubles Colons «::» entre la classe et le nom de fonction comme class_name :: func_name. S'il s'agit de la fonction non statique, l'utilisation de cela donnera une erreur «Erreur, une référence de membre non statique doit être relative à un objet spécifique».

Parfois, il devient mouvementé de ce type d'erreur lorsque les nouveaux programmeurs utilisent une fonction non statique. Mais une fois qu'ils se familiarisent avec cela, il devient facile de résoudre ces erreurs. Pour résoudre cette erreur, il existe deux méthodes. Le premier consiste à changer la fonction en fonction statique et à l'appeler en utilisant simplement la méthode d'appel "class_name :: function_name". Ou la deuxième méthode, c'est-à-dire que nous devons créer un objet de cette classe, puis en utilisant le nom d'objet que nous pouvons appeler la fonction par la fonction appelée «class_object.function_name ".

Syntaxe:

Il n'y a pas de syntaxe spécifiée pour cette erreur car elle ne fait pas partie du code, c'est l'erreur de temps de compilation qui peut se produire en raison de bogues dans le code.

Erreur: Impossible d'appeler la fonction du membre «Fonction» sans objet

L'on ci-dessus est une image de ce à quoi ressemble l'erreur.

Exemple # 01:

Maintenant, nous allons effectuer un exemple pour vérifier comment cette erreur est causée et comment résoudre ce type d'erreur. Avant de passer à notre code principal, où l'erreur se produit, nous inclurons d'abord le fichier d'en-tête «iOStream» qui est utilisé pour nous permettre d'effectuer des opérations d'E / S. Après cela, nous avons créé un objet de classe nommé "My_Object". À l'intérieur de cette classe, nous avons déclaré un membre statique nommé «Display ()» et également une fonction membre non statique «show ()».

En dehors de la classe, nous avons appelé les deux fonctions en utilisant la classe «my_object». À l'intérieur de la fonction membre Display (), nous avons imprimé le message d'exécution pour la méthode affichage (). Et dans la méthode Show (), nous avons demandé au compilateur d'imprimer le message d'exécution pour la méthode Show (). En direction de notre fonction principale, où nous appellerons les deux fonctions en utilisant la méthode d'appel des membres statique qui est le nom de la classe puis les doubles colons avec le nom de la méthode. Dans notre cas, cela ressemble à "my_object :: display ();". Nous avons appelé notre fonction show () et renvoyé la valeur nul, nous allons maintenant exécuter le code.

#inclure
Utilisation de Namespace Std;
classe my_object
public:
Display vide statique ();
void show ();
;
void my_object :: display ()
couter << "display() method executed" << endl;

void my_object :: show ()
couter << "Show() method executed" << endl;

int main()
my_object :: display ();
my_object :: show ();
retour 0;

Après avoir exécuté notre code, nous avons rencontré cette erreur affichée en ligne «21» où nous avons appelé notre méthode «show ()». L'erreur qui a été rencontrée est due à l'appel de fonction car il s'agit d'un membre non statique et nous l'avons appelé en utilisant la méthode d'appel de membre statique. Nous allons maintenant résoudre cette erreur en utilisant la façon précise d'appeler la fonction non statique.

Comme indiqué dans l'extrait ci-dessous, nous avons remplacé l'appel de fonction par le bon en créant d'abord un objet à cette classe. Ensuite, en utilisant cet objet, nous avons appelé la fonction par référence à cet objet «OBJ». Maintenant, nous exécutons à nouveau le code.

Après avoir à nouveau exécuté le code, nous avons affiché avec succès les deux messages de la fonction comme nous pouvons le voir dans la figure ci-dessous cette fois, aucune erreur n'a été affichée.

Exemple # 02:

Maintenant, nous implémenterons un autre exemple dans lequel nous allons créer une fonction non statique dans laquelle nous allons effectuer un calcul. Après avoir inclus notre fichier d'en-tête, nous créerons une classe nommée «MyClass» dans laquelle nous avons déclaré un membre statique nommé «my_func ()» et un membre non statique «Add ()». En dehors de cette classe, nous avons appelé les deux fonctions. Dans la fonction add (), nous effectuerons l'ajout de deux variables entières «A» et «B» auxquelles nous avons attribué les valeurs «2» et «3» et les stocker dans une variable entière «C» ». À la fin, en utilisant l'instruction «cout», nous imprimerons la somme des deux valeurs. Dans la deuxième fonction my_func (), nous afficherons simplement le message à partir de quelle fonction il est affiché. Maintenant, plongeant dans notre fonction principale où en utilisant l'appel de méthode statique, nous appellerons les deux fonctions. Après avoir appelé ces méthodes, nous exécuterons le code.

#inclure
Utilisation de Namespace Std;
classe myclass

public:
statique int my_func ();
void add ();
;
void myClass :: Add ()

int a = 2, b = 3;
int c = a + b;
std :: cout <<"the sum of a and b is: "<< c << std::endl;

int myclass :: my_func ()

std :: cout << "this is my_func() method" << std::endl;
retour 0;

int main()
myClass :: my_func ();
myClass :: Add ();

Vous trouverez ci-dessous le message d'erreur affiché dans notre partie de sortie qui indique qu'il y a un mauvais appel de fonction sur la ligne 22 pour la méthode myClass :: Add () qui a été appelée sans créer un objet pour cette classe. Comme nous l'avons discuté ci-dessus, nous ne pouvons pas appeler un membre non statique sans créer un objet. Nous allons maintenant essayer de résoudre cette erreur.

Dans la figure donnée, nous avons écrit la bonne façon d'appeler un membre non statique. Nous avons d'abord créé un objet pour la classe dont la fonction sera appelée. Nous avons déclaré l'objet «obj» pour «myclass» avec la référence dont nous appellerons cette fonction. Après avoir créé l'objet, nous avons appelé la fonction en utilisant la fonction appelée «obj.add () ”puis exécuter le code.

Après l'exécution du code, nous avons calculé avec succès l'ajout des variables que nous avons effectuées dans la méthode «Add ()» et affiché le résultat en utilisant la variable «C» qui maintient la valeur de retour de l'ajout.

Conclusion

Dans ce guide, nous avons étudié l'erreur de temps de compilation qui se produit principalement en raison de l'appel de fonction de la fonction membre non statique. Cette erreur se produit principalement en raison de l'idée fausse du codeur sur les membres non statiques. Nous avons expliqué la façon de résoudre ces erreurs en implémentant plusieurs exemples.