In diesem Bereich sind Themen vom Themenersteller als erledigt zu markieren, wenn die Frage beantwortet oder das Problem gelöst wurde. Das Thema wird daraufhin automatisch geschlossen.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. [C++] Unzulässiger Aufruf einer nicht statischen Memberfunktion (gelöst)
Hallo, bin mal wieder an einer kleinen Übungsaufgabe zu C++. Es geht dabei um die Berechnung von komplexen Zahlen. Dies ist für mein Problem nebensächlich. Ich bin gerade am Anfang und will testen ob mein Standartkonstruktor funktioniert. Dazu will ich ihn erzeugen und danach mit print() ausgeben lassen. Dabei liefert mit Visual Studio 08 folgenden Fehler:
Unzulässiger Aufruf einer nicht statischen Memberfunktion (Main.cpp Zeile: 1 Main.cpp #include <iostream> #include "Complex.h" using namespace std; /*@aurhor: Dominic * Test der Implementierung: complex */ int main(int argc, char* argv[]){ cout << "c1"; //Ruft Standartkonstruktor auf Complex::Complex(); //Ruft die Printmethode auf, //hier entsetht der Fehler (in VS 08 C2352) Complex::print(); return 0; } Complex.h #include <iostream> #include "Complex.h" #include <math.h> using namespace std; Complex::Complex(int realP, int imagP){ this->realPart = realP; this->imagPart = imagP; } void Complex::setImag(int imagP){ this->imagPart = imagP; } void Complex::setReal(int realP){ this->realPart = realP; } int Complex::getImag(){ return this->imagPart; } int Complex::getReal(){ return this->realPart; } double Complex::absolutValue(){ return (sqrt((double)(getReal() * getReal()) +(double)(getImag() * getImag()))); } } void Complex::print(){ cout << getReal() << " + i " << getImag(); } complex.h #ifndef __Complex__ #define __Complex__ class Complex { public: Complex add(Complex op); double absolutValue(); int getReal(); int getImag(); void setReal(int realP); void setImag(int imagP); //Standartkonstruktor Complex(){ realPart = 0; imagPart = 0; } Complex(int realP, int imagP); void print(); private: int realPart; int imagPart; }; #endif Ich hoffe mir kann jemand den Fehler erklären den ich hier mache. MFG Zuletzt bearbeitet: 21 April 2008
Sowie ich das sehe (CPP schon einige Jahre eingerostet), rufst du in Zeile 18 die Methode aus einem statischen Kontext aus. Du müstest sowas machen wie Complex c; Nagel mich jetzt nicht auf die genaue Syntax fest, aber ich meine so müsste es gehen... Zuletzt bearbeitet: 21 April 2008
theHackersieht vor lauter Ads den Content nicht mehr20 April 200622.6521.287
Der Konstruktor wird automatisch ausgeführt. Einfach nur Complex c; // deklarieren, initialisieren, triggert Konstruktor
c.print(); Complex* c; // nur deklarieren, kein Speicher reserviert !
// c->print(); // führt zum SIGSEGV
c = new Complex(); // Speicher holen, Konstruktor aufrufen
c->print();
delete c; // freigeben Zuletzt bearbeitet: 21 April 2008
Manchmal ist es doch zu simpel um es zu glauben. //Ruft Standartkonstruktor auf
Complex c;
//Ruft die Printmethode auf
c.print(); Zuletzt bearbeitet: 21 April 2008
|