Używanie metod z dwóch klas w dwóch plikach

0

Cześć, mam taki problem. Otóż chciałbym używać naprzemiennie metod z 2 klas umieszczonych w 2 plikach.
Użyłem tzw. deklaracji wyprzedzającej include'jac pierwsza z klas do drugiej, a w pierwszej uzyłem predefinicji class Druga.
O ile w drugiej mogę użyć metod klasy pierwszej, to w drugiej nie jest to możliwe użyć metod z pierwszej, bo kompilator ich nie widzi. Dodam, że mówię o plikach nagłówkowych, metody są małe i nie definiowałem dodatkowych plików*.cpp dla każdej z klas.
Chciałbym ten problem rozwiązać tylko na plikach nagłówkowych.
Bardzo dziękuję za pomoc.
Miłego wieczoru.

0

Możesz implementacje metod wrzucić do innego nagłówka, a nagłówki z definicjami klas trzymać osobno. Ogółem chodzi o to, żeby obie definicje były widoczne dla definicji funkcji używających obu klas - inaczej się nie da.

Możesz też użyć szablonów do opóźnienia momentu, gdy kompilator szuka implementacji używanych funkcji.

template<typename T>
struct Foo
{
	int qux(T const& t) const {
		return t.quux();
	}
};

struct Bar
{
	int qux(Foo<Bar> const& foo) const {
		return foo.qux(*this);
	}

	int quux() const {
		return 42;
	}
};

Nie jest pięknie i nie polecam tego rozwiązania, ale działa.
http://melpon.org/wandbox/permlink/Tu0ORbi063XJh3PZ
Wykonanie tylko dla Bar możesz ograniczyć np. za pomocą enable_if, ale to kolejny krok w złym kierunku:

struct Bar;

template<typename T, typename U = typename enable_if<is_same<T,Bar>::value,void>::type>
struct Foo
{
	int qux(T const& t) const {
		return t.quux();
	}
};

http://melpon.org/wandbox/permlink/z3pEweaXttpp9BPR
Innych metod nie widzę.

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