Widoczność klas

0

Mam pewnie prosty problem ale nie mogę wpaść na rozwiązanie.

Mam dwie klasy które odwołują się do siebie nawzajem i powstaje problem taki, że jedna klasa chce operować na obiekcie klasy drugiej której jeszcze kompilator nie poznał co wywala błąd.

Gdyby to były funkcje odwołujące się do siebie to wystarczyłoby zrobić obie deklaracje przed definicjami a jak to rozwiązać z klasami?

Kawałek kodu dla rozjaśnienia:

class A {
public:
	void foo(B &b){
		printf("foo A, czytam B: %d\n", b.item);
	}
	A(void) {
		item = 10;
	}
	int item;
};
/////////////////////////////////////////////////////////////
class B {
public:
	void foo(A &a){
		printf("foo B, czytam A: %d\n", a.item);
	}
	B(void) {
		item = 100;
	}
	int item;
};
/////////////////////////////////////////////////////////////
main() {
	A a;
	B b;
	a.foo(b);
	b.foo(a);
}
0

daj

class A;
class B;

na poczatku kodu

0

Próbowałem ale wywala:

main.cpp:9: błąd: invalid use of incomplete type `struct B,

W linijce

printf("foo A, czytam B: %d\n", b.item);

i

main.cpp:4: błąd: forward declaration of `struct B,

W linijce

class B;
</quote>

Edit:
Nieważne, już pomogło takie cóś:

#include<stdio.h>
/////////////////////////////////////////////////////////////
class A;
class B;

class A {
public:
	void foo(B &b);
	A(void) {
		item = 10;
	}
	int item;
};
/////////////////////////////////////////////////////////////
class B {
public:
	void foo(A &a);
	B(void) {
		item = 100;
	}
	int item;
};
void A::foo(B &b){
	printf("foo A, czytam B: %d\n", b.item);
}
void B::foo(A &a){
	printf("foo B, czytam A: %d\n", a.item);
}
/////////////////////////////////////////////////////////////
main() {
	A a;
	B b;
	a.foo(b);
	b.foo(a);
}

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