Klassentypumwandlung von zwei Klassen will nicht

Thopeto

Erfahrenes Mitglied
Gegenseitiges Casten von zwei Klassen will nicht

Hi

Ich habe zwei Klassen, die einen Operator beinhaltet, die es ermöglichen von einer in die andere Klasse und umgekehrt zu casten. Aber leider will es nicht, wie ich es möchte. wo ist mein fehler?

Code:
#include <iostream>
using namespace std;

class cBruch;
class cComplexT {
public:
	cComplexT(int re_in, int im_in) {
		re = re_in;
		im = im_in;
	}

	operator cBruch (void) {
		return cBruch(re, im);
	}

public:
	int re;
	int im;
};

class cBruch {
public:
	cBruch(int zaehler_in = 0, int nenner_in = 0) {
		zaehler = zaehler_in;
		nenner = nenner_in;
	}

	operator cComplexT (void) {
		return cComplexT(zaehler, nenner);
	}

public:
	int zaehler;
	int nenner;
};

als Fehler gibt er mir das aus:
1> d:\test\main.cpp(4): Siehe Deklaration von 'cBruch'
1>d:\test\main.cpp(13): error C2514: 'cBruch': Klasse besitzt keine Konstruktoren
1> d:\test\main.cpp(4): Siehe Deklaration von 'cBruch'

Viele Grüße
 
Zuletzt bearbeitet:
Hi.

Um eine Klasse instanzieren zu können, muß die Klasse vollständig deklariert worden sein.

Du hast nur eine Vorwärtsdeklaration angegeben, was nicht ausreichend ist.

Die Fehlermeldung ist insoweit irreführend, da cBruch sehr wohl einen Konstruktor besitzt, dieser allerdings zum Zeitpunkt der Instanzierung im operator cBruch() noch nicht bekannt ist.

Definiere die Operatoren außerhalb der Klassen nachdem beide Klassen vollständig deklariert sind.

\edit: Es kann in solchen Fällen nicht schaden einen anderen Compiler zu benutzen. Der GCC z.B. erzeugt folgende Fehlermeldung (die den Nagel auf den Kopf trifft):
Code:
bruch.cpp: In member function 'cComplexT::operator cBruch()':
bruch.cpp:12:28: error: return type 'struct cBruch' is incomplete
bruch.cpp:13:29: error: invalid use of incomplete type 'struct cBruch'
bruch.cpp:4:7: error: forward declaration of 'struct cBruch'
\edit2: Weiterhin ist es ganz sinnvoll sich mal die Hilfe zu dem Fehler durchzulesen. Zu C2514 sagt http://msdn.microsoft.com/de-de/library/4ce3zbbc(VS.80).aspx folgendes:
Eine Klasse muss vollständig deklariert werden, damit sie instanziiert werden kann.
Auf der Seite ist auch ein Beispiel welches deinem Code sehr ähnlich sieht...

Gruß
 
Zuletzt bearbeitet:
@vfl_freak: ohne worte. sowas ist keine Hilfe. Ich glaub, du hast selber keine AHnung, worum es wirklich ging.

@deepthroat: vielen dank. hat mir sehr geholfen. Hab die Implementierung dann unterhalb von cBruch vorgenommen.
 
Zurück