Fehlender Typspezifizierer

FIAE10

Grünschnabel
Moin moin.
Ich habe hier folgendes Konstrukt, dass so, wie es unten steht nicht funktioniert. Ich habe aber leider auch keine Ahnung, wieso es nicht funktioniert, könnte mir hier jemand auf die Sprünge helfen?

Code:
class B 
{
	private:
		A a;

	public:
		B()
		{
		}
};

class A 
{
	private:
		B *m_pB;

	public:
		A() 
		{
		}

		A(B *b) : m_pB(b) 
		{	
		}

		~A()
		{
			delete m_pB;
		}
};

Code:
error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'a'
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
 
Hi.

Bevor du Funktionen, Klassen usw. verwenden kannst, müssen diese erstmal deklariert sein.

In Zeile 4 ist die Klasse A (welche erst in Zeile 12 deklariert wird) nicht bekannt.

Du müßtest die Klasse A vorwärts-deklarieren:
C++:
class A;
Das nächste Problem ist dann aber, dass man keine Variablen von vorwärts-deklarierten Klassen definieren kann, da der Typ nicht vollständig bekannt ist.

Man darf nur Zeiger und Referenzen von unvollständigen Typen erstellen.

Tausche einfach die Reihenfolge der Deklaration von A und B. Und füge eine Vorwärtsdeklaration von B hinzu.

\edit: Achtung: dein Beispiel funktioniert dann aber auch nicht unbedingt richtig. Du solltest die Implementierung der Methoden in eine eigene .cpp Datei auslagern, da du delete nur auf vollständig definierte Klassen aufrufen solltest (damit der richtige Destruktur oder delete Operator aufgerufen wird).

Gruß
 
Zuletzt bearbeitet:
Zurück