Fehler: Mitgliedsfunktion kann nicht ohne Objekt in C++ aufgerufen werden
-
Beheben Sie den
Fehler: Member-Funktion kann nicht ohne Objekt aufgerufen werden
in C++ - Verwenden Sie eine Instanz der Klasse, um auf die Elementfunktionen zuzugreifen
- Verwenden Sie statische Elementfunktionen
Dieser Artikel beschreibt den häufig auftretenden Fehler cannot call member function without object
bei der objektorientierten Programmierung mit C++. Darüber hinaus bietet es auch mögliche Korrekturen für den Fehler.
Beheben Sie den Fehler: Member-Funktion kann nicht ohne Objekt aufgerufen werden
in C++
Ein häufiger Fehler in C++ tritt häufig bei der Arbeit in der objektorientierten Programmierung auf und besagt, dass Memberfunktion ohne Objekt nicht aufgerufen werden kann
. Die Ursache dieses Fehlers liegt darin, dass Sie eine Mitgliedsmethode der Klasse aufrufen, ohne die Klasse zu instanziieren.
Jede Klasse hat eine Reihe von Datenmembern und einige Memberfunktionen. Wir müssen das Klassenobjekt erstellen, um auf die Mitgliedsmethoden oder -funktionen zuzugreifen, und dann die Methoden mit diesem Objekt aufrufen/auf sie zugreifen.
Betrachten Sie den folgenden Code.
#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; }
Dieser Code generiert die folgende Ausgabe.
Zeile #16 im obigen Code-Snippet versucht, die Methode getArea()
unter Verwendung des Klassennamens aufzurufen. Auf alle nicht statischen Mitglieder einer Klasse darf nur über ein Objekt der Klasse zugegriffen werden; daher erzeugt die Zeile den Fehler.
Verwenden Sie eine Instanz der Klasse, um auf die Elementfunktionen zuzugreifen
Der Fehler kann behoben werden, indem die Funktion/Methode mit einem Objekt der Klasse wie folgt aufgerufen wird:
int main() {
Rectangle r;
cout << "Area: " << r.getArea() << endl;
}
Dadurch erhalten Sie die richtige Ausgabe.
Area: 40
Verwenden Sie statische Elementfunktionen
Statische Elementfunktionen sind die Funktionen einer Klasse, die kein Objekt benötigen, um sie aufzurufen. Sie können mit dem Bereichsauflösungsoperator ::
direkt mit dem Klassennamen aufgerufen werden.
Bei der Verwendung der statischen Elementfunktionen müssen bestimmte Einschränkungen beachtet werden. Eine statische Memberfunktion kann nur auf die statischen Datenmember der Klasse zugreifen und nur die anderen statischen Memberfunktionen aufrufen.
Sehen wir uns das folgende Beispiel an, in dem die Lösung für den Fehler Elementfunktion kann nicht ohne Objekt aufgerufen werden
diskutiert wird.
#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();
}
Dies ergibt die folgende Ausgabe.
Area: 40
Hello, I am a Rectangle.