[C++] Zwei Classen die sich gegeseitig benutzen *solved*

Sjune

Alter Benutzer
ID: 127247
L
16 Juli 2006
14
0
Hallo,
ich weis nicht genau wie ich das Problem nennen soll =/
Desshalb konnte ich auch nur sehr beschränkt danach suchen...

Also ich habe zwei Klassen: a und b;
Schön aufgeteilt auf 4 Dateien a.h, a.cpp, b.h und b.cpp;

Ich Klasse a habe ich eine Methode die vom Rückgabewert b ist.
Andersrum in b eine Methode die a zurückgiebt.

Das ist auch schon das problem.

Eig reicht es mir wenn ihr mir veratet wie ich folgenden Quellcode Complilliert bekomme und dazu noch eine klene Erklärung wieso, dass wär nett =)



b.h
PHP:
#ifndef __b
#define __b

#include "a.h"

class b
{
	public:
		b();
		a geta();
};

#endif

b.cpp
PHP:
#include "b.h"

b::b()
{
	
}

a b::geta()
{
	return a();
}

a.h
PHP:
#ifndef __a
#define __a

#include "b.h"

class a
{
	public:
		a();
		b getb();
};

#endif

a.cpp
PHP:
#include "a.h"

a::a()
{
	
}

b a::getb()
{
	return b();
}
 
Zuletzt bearbeitet:
du musst a einfach vor b bekannt machen. also (in eine Datei zusammengefasst:)

Code:
class a;
class b
{
...
a machwas(void);
...

};

class a
{
...
b machwasanderes(void);
...
};


also einfach vorher einmal deklarieren dann kannste die benutzen auch wenn sie noch nicht definiert ist



Außerdem brauchst du glaube ich in beiden Klassen einen Kopierkonstruktor...
 
Zuletzt bearbeitet:
oO sicher michse schon mal was von headern gehört?
man darf auch klassen trennen....

meiner meinung gehört da noch nen new rein aber deine 2 "test"klassen sind bissi komisch ;)
also ich würds mal mit return new a(); (analog dazu in a.cpp) probieren bzw nen private vari definieren in der du b bzw a hast und diese beim constructor definierst usw....
kann aber auch was anders sein bin grad zufaul 4 dateien anzulegen...

mfg
Samy
 
was trotzdem nichts daran ändert das a (oder entsprechend b) in der neuen Klasse noch nicht bekannt ist...

Kleines "Rechenbeispiel":

a.h setz die Konstate. Danach includiert es b.
b setzt konstante. b will a includieren. a ist aber "leer" weil die Konstante gesetzt ist. Also kein Include.
b will a als Rückgabetyp verwenden. Aber a ist noch gar nicht deklariert...

Umgekehrt natürlich genauso....

Also abhilfe: Klassen vorher deklarieren...
 
Vielen Dank!

Alles was ich nicht wusste war das man auch für ganze Klassen "Protopyten"? setzen kann also class a; mehr war es nicht :D
 
Das nennt sich uebrigens forward declaration und kann bei sehr verschachtelten Klassenhierachien, vorausgesetzt man benutzt nur Pointer auf Instanzen der Klasse, ein bisschen Compilezeit rausschlagen, da der Compiler sich einfach sagt "Alles klar, das gibts, ich muss nix ueberpruefen."