Zaprzyjaźnione klasy problem.

0

Witam.
Mam takie oto diw przykładowe klasy:

A.h

#ifndef A_H
#define A_H

#include "struktury.h"
#include "B.h"


class A
{
private:
	int liczba;
	B *b;

	friend class B; 
	
public:

	void funkcja()
	{
		//cos robie
	}
	
	void funkcja_2()
	{
		b->funkcja_b( this );
	}
};

#endif 

B.h

 #ifndef B_h
#define B_h

#include "struktury.h"
#include "A.h"
#include <vector>

class A;

class B
{
private: 
/*...*/


public:
/*..*/
	void funkcja_b( A *a )
	{
		a->funkcja();
		int liczba = a->liczba;

	}
};


#endif

I mam problem poniewarz kompilator daje błędy typu:
1> error C2027: use of undefined type 'A'
przy: a->funkcja(); w pliku B.h w funkcji funkcja_b()

Nie bardzo wiem jak to obejść, więc zwracam się do Was z prośbą o pomoc :)

0

Zadeklaruj klasę A w pliku B.h przed include. Może to coś da

0

Przynajmniej w jednej z klas (najlepiej w obu) koniecznie trzeba wynieść definicje metod operujących na obcej klasie na zewnątrz klasy do pliku .cpp.

Nie rozdzielaj programu na pliki dopóki nie nauczysz się pisać w jednym, bo teraz masz nałożone dwa problemy.
Teraz masz taki schemat:

class A;
class B;

class A
  {
   public:
   void fun(B *b) { b->fun(this); }
  };

class B
  {
   public:
   void fun(A *a) { a->fun(this); }
  };

I nie ważne w jakiej kolejności umieścisz klasy A i B zawsze wewnątrz pierwszej z nich kompilator jeszcze nic nie wie o metodzie fun() wewnątrz drugiej klasy, rozwiązanie proste:

class A;
class B;

class A
  {
   public:
   void fun(B *b);
  };

class B
  {
   public:
   void fun(A *a);
  };

void A::fun(B *b) { b->fun(this); }
void B::fun(A *a) { a->fun(this); }

Teraz nie ważne w jakiej kolejności zadeklarowane klasy A i B na moment ich użycia w funkcjach fun kompilator już wszystko wie.
Generalnie zastanów się nad przeprojektowania klas, bo to jest zły pomysł.

PS. przykład czysto dydaktyczny, odpalenie metody fun() powoduje przepełnienie stosu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1