Witam.
Zacznę od tego, że program się kompiluje i działa, ale wypisuje pewne ostrzeżenia. Znam ich genezę i wiem dlaczego się pojawiają jednak brak mi pomysłu na poprawne rozwiązanie.
Problem przedstawie merytorycznie. Sprawa wygląda tak:
Mam 3 klasy, powiedzmy class A, class B,class C
Kllasy znajdują się w takich o to plikach.
plikA.h (zawiera klasę A)
plikBC.h (zawiera klasy B,C)
Co jest kluczowe i proszę o tym pamiętać:
klasa B oraz C za argument w konstruktorze przyjmuje wskaźnik na klasę A (this).
Elementy tych klas są tworzone w konstruktorze klasy A.
Co dalej:
W konstruktorze klasy A tworzę sobie obiekty z klasy B (np w QMainWindow kolejne pod okno QDialog). Tworzone obiekty klasy B w konstruktorze jako argument przyjmują wskaźnik na klasę A (this). To po to, aby mieć swobodny dostęp do eobiektów klasy A (przyjaźń).
Teraz, zauważyłem, że fajnie byłoby zrobić dziedziczenie w pliku plikBCD.h czyli;
class C :public class B
Zatem na liście inicjalizacyjnej konstruktora klasy BC podaje JAWNE wywołanie konstruktora klasy C (normalna zasada dziedziczenia).
C::C(A*wsk):wsk(wsk) , B(wsk)
obiekt klasy C tworzę oczywiście w klasie A w ten sposób:
C*nowyobiektC = new C(this);
Tu jednak pojawia się ostrzeżenie nazywane przez kompilator.
'class C:wsk' will be initialized after
Co doskonale rozumiem, ponieważ zgodnie z zasadą najpierw jest tworzony obiekt B (bazowy), a że obiekt bazowy potrzebuje wskaźnik na obiekt klasy A w konstruktorze (wsk) musi tak jakby "poczekać", aż go dostanie dzięki inicjalizacji obiektu klasy B.
Problem polega na tym, że nie potrafię wymyślić jak można by inaczej, dać bazowej klasie B wskaźnik na klasę A na tej liście. Może jakiś globalny wskaźnik, albo wskaźnik domyślny (jest coś takiego?) ?