[C++] Unzulässiger Aufruf einer nicht statischen Memberfunktion (gelöst)

TooR

0 8 15
ID: 113427
L
19 Juni 2006
322
21
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: 18)

Main.cpp
PHP:
#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
PHP:
#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
PHP:
#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:
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;
c = new Complex();
c->print();

Nagel mich jetzt nicht auf die genaue Syntax fest, aber ich meine so müsste es gehen...
 
Zuletzt bearbeitet:
Der Konstruktor wird automatisch ausgeführt.

Einfach nur
PHP:
Complex c; // deklarieren, initialisieren, triggert Konstruktor
c.print();
Alternativ:
PHP:
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:
Manchmal ist es doch zu simpel um es zu glauben.
Hier mal der Ausschnitt, der Main.cpp, welche zur Lösung geführt hat:
PHP:
//Ruft Standartkonstruktor auf
	Complex c;

	//Ruft die Printmethode auf
	c.print();

Vielen dank für die Hilfe
 
Zuletzt bearbeitet: