Error de C ++ Una referencia de miembro no estática debe ser relativa a un objeto específico

Error de C ++ Una referencia de miembro no estática debe ser relativa a un objeto específico
Hoy, discutiremos un error que puede ocurrir debido a la falta de práctica por parte de un programador cuando mezclen el concepto de funciones estáticas y no estáticas. Primero estudiar las funciones de los miembros no estáticos. Estas son el tipo de funciones que se declaran en el área de especificación del miembro de cualquier clase sin ningún especificador estático. Para los miembros no estáticos, existe un método especial para la declaración. En C ++, si necesitamos llamar a cualquier función desde cualquier clase, podemos llamarla creando un objeto. Si es el miembro estático, se llamará por las colons dobles "::" entre la clase y el nombre de la función como class_name :: func_name. Si se trata de la función no estática, el uso de esto dará un error que es "Error que una referencia de miembro no estática debe ser relativa a un objeto específico".

A veces se vuelve agitado abordar este tipo de error cuando los nuevos programadores están utilizando una función no estática. Pero una vez que se familiarizan con esto, se hace fácil resolver estos errores. Para resolver este error hay dos métodos. El primero es cambiar la función a la función estática y llamarla simplemente utilizando el método de llamada "class_name :: function_name". O el segundo método, es decir, tenemos que crear un objeto de esa clase y luego, utilizando el nombre del objeto, podemos llamar a la función por la función llamada "class_object.nombre de la función".

Sintaxis:

No hay una sintaxis especificada para este error porque no es parte del código, es el error de tiempo de compilación el que puede ocurrir debido a los errores en el código.

Error: no se puede llamar a la función de la función miembro sin objeto

Lo anterior que se muestra es una imagen de cómo se ve el error.

Ejemplo # 01:

Ahora, realizaremos un ejemplo para verificar cómo se causa este error y cómo resolver este tipo de error. Antes de pasar a nuestro código principal, donde ocurre el error, primero incluiremos el archivo de encabezado "iOStream" que se utiliza para permitirnos realizar operaciones de E/S. Después de eso, creamos un objeto de clase llamado "my_object". Dentro de esta clase, declaramos un miembro estático llamado "Display ()" y también una función de miembro no estática "Show ()".

Fuera de la clase, hemos llamado a ambas funciones usando la clase "my_object". Dentro de la función de miembro Display (), hemos impreso el mensaje de ejecución para el método Display (). Y en el método show (), hemos ordenado al compilador que imprima el mensaje de ejecución para el método show (). Dirigirnos hacia nuestra función principal, donde llamaremos a ambas funciones utilizando el método de llamadas de miembro estático que es el nombre de la clase y luego los colons dobles junto con el nombre del método. En nuestro caso, parece "my_object :: display ();". Llamamos a nuestra función show () y devolvimos el valor nulo, ahora ejecutaremos el código.

#incluir
usando el espacio de nombres STD;
clase my_object
público:
pantalla vacía estática ();
show nulo ();
;
void my_object :: display ()
cout << "display() method executed" << endl;

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

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

Después de ejecutar nuestro código, encontramos este error que se muestra en la línea "21" donde llamamos nuestro método "show ()". El error que se encontró se debe a la llamada de función porque es un miembro no estático y lo llamamos usando el método de llamada de miembro estático. Ahora resolveremos este error utilizando la forma precisa de llamar a la función no estática.

Como se muestra en el fragmento a continuación, hemos reemplazado la llamada de función con la correcta creando primero un objeto a esa clase. Luego, usando este objeto, llamamos a la función por referencia a ese objeto "obj". Ahora, ejecutamos el código nuevamente.

Después de ejecutar el código nuevamente, mostramos con éxito los mensajes de ambos funciones, como podemos ver en la figura a continuación, este tiempo no se ha mostrado ningún error.

Ejemplo # 02:

Ahora, implementaremos otro ejemplo en el que crearemos una función no estática en la que realizaremos un cálculo. Después de incluir nuestro archivo de encabezado, crearemos una clase llamada "MyClass" en la que declaramos un miembro estático llamado "my_func ()" y un miembro no estático "add ()". Fuera de esa clase, llamamos a ambas funciones. En la función add (), realizaremos la adición de dos variables enteras "A" y "B" a las que asignamos los valores "2" y "3" y las almacenaremos en una variable entera "C". Al final, utilizando la declaración "cout", imprimiremos la suma de ambos valores. En la segunda función my_func (), simplemente mostraremos el mensaje desde qué función se muestra. Ahora, sumergirnos en nuestra función principal donde utilizando la llamada del método estático, llamaremos a ambas funciones. Después de llamar a esos métodos, ejecutaremos el código.

#incluir
usando el espacio de nombres STD;
Clase MyClass

público:
static 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;
regresar 0;

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

A continuación se muestra el mensaje de error que se muestra en nuestra parte de salida que indica que hay una llamada de función incorrecta en la línea 22 para el método myclass :: add () que se ha llamado sin crear un objeto para esa clase. Como discutimos anteriormente, no podemos llamar a un miembro no estático sin crear un objeto. Ahora intentaremos resolver este error.

En la figura dada, hemos escrito la forma correcta de llamar a un miembro no estático. Primero creamos un objeto para la clase de la cual se llamará a la función. Declaramos el objeto "obj" para "myclass" con la referencia del cual llamaremos esa función. Después de crear el objeto, llamamos a la función usando la función llamada "OBJ.agregar () "y luego ejecutar el código.

Después de la ejecución del código, calculamos con éxito la adición de las variables que hemos realizado en el método "add ()" y mostramos el resultado utilizando la variable "C" que mantiene el valor de retorno de la adición.

Conclusión

En esta guía, hemos estudiado el error de tiempo de compilación que ocurre principalmente debido a la llamada de función de la función de miembro no estático. Este error ocurre principalmente debido a la idea errónea del codificador sobre los miembros no estáticos. Explicamos la forma de resolver estos errores implementando múltiples ejemplos.