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
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ę.