Error: no se puede llamar a la función miembro sin objeto en C++
-
Solucione el
error: no se puede llamar a la función miembro sin objeto
en C++ - Usar una instancia de la clase para acceder a las funciones de los miembros
- Usar funciones de miembros estáticos
Este artículo describe el error común “no se puede llamar a la función miembro sin objeto” al hacer programación orientada a objetos usando C++. Además, también proporciona soluciones potenciales al error.
Solucione el error: no se puede llamar a la función miembro sin objeto
en C++
Un error común en C++ ocurre con frecuencia cuando se trabaja en programación orientada a objetos, que indica “no se puede llamar a la función miembro sin objeto”. La causa de este error es que está llamando a algún método miembro de la clase sin instanciar la clase.
Cada clase tiene un conjunto de miembros de datos y algunas funciones miembro. Necesitamos crear el objeto de clase para acceder a los métodos o funciones miembro y luego llamar/acceder a los métodos usando este objeto.
Considere el siguiente código.
#include <iostream>
using namespace std;
class Rectangle {
private:
int length = 5;
int width = 8;
public:
double getArea() { return length * width; }
};
int main() { cout << "Area: " << Rectangle::getArea() << endl; }
Este código generará el siguiente resultado.
La línea #16 en el fragmento de código anterior intenta llamar al método getArea()
usando el nombre de la clase. Solo se debe acceder a todos los miembros no estáticos de una clase a través de un objeto de la clase; por lo tanto, la línea genera el error.
Usar una instancia de la clase para acceder a las funciones de los miembros
El error se puede resolver llamando a la función/método con un objeto de la clase como este:
int main() {
Rectangle r;
cout << "Area: " << r.getArea() << endl;
}
Esto dará la salida correcta.
Area: 40
Usar funciones de miembros estáticos
Las funciones miembro estáticas son las funciones de una clase que no necesitan un objeto para llamarlas. Se pueden llamar directamente con el nombre de la clase utilizando el operador de resolución de ámbito ::
.
Ciertas limitaciones deben tenerse en cuenta al usar las funciones miembro estáticas. Una función de miembro estático solo puede acceder a los miembros de datos estáticos de la clase y solo puede llamar a las otras funciones de miembro estático.
Veamos el siguiente ejemplo que analiza la solución al error no se puede llamar a la función miembro sin objeto
.
#include <iostream>
using namespace std;
class Rectangle {
private:
int length = 5;
int width = 8;
public:
double getArea() { return length * width; }
static void getShapeName() { cout << "Hello, I am a Rectangle." << endl; }
};
int main() {
Rectangle r;
cout << "Area: " << r.getArea() << endl;
Rectangle::getShapeName();
}
Esto dará la siguiente salida.
Area: 40
Hello, I am a Rectangle.