Odwoływanie się 2 klas między sobą
Ostatnio zmodyfikowano 2013-11-18 19:37
rafixxx25 Temat założony przez niniejszego użytkownika |
Odwoływanie się 2 klas między sobą » 2013-11-17 20:07:04 Mam coś w tym stylu: class A : public Bazowa { ... void metoda1( B obiekt ); void metoda2(); }
class B : public A { ... }
W metoda1 klasy A używam motoda2 obiektu klasy B(dziedziczona). Oczywiście nie mogę załączyć plików nagłówkowych wzajemnie w obu plikach. Nie wiem, jak mogę to rozwiązać. Czy istnieje jakieś odpowiednie zadeklarowanie, by dało się to wykonać? |
|
oputyk |
» 2013-11-17 21:47:00 Ale o co Ci chodzi? Chcesz wywołać funkcję z klasy odziedziczonej? Jeśli tak no to nie wiem w czym problem. |
|
rafixxx25 Temat założony przez niniejszego użytkownika |
» 2013-11-17 21:59:02 Chcę użyć funkcji obiektu klasy pochodnej w funkcji obiektu klasy bazowej(któremu chce podać obiekt klasy pochodnej). class Bazowa { funkcja(Pochodna obiekt) { obiekt.funkcjaKlasyPochodnej(); } }
Nie mogę tego zrobić, ponieważ nie mogę załadować pliku nagłówkowego klasy pochodnej do pliku nagłówkowego klasy bazowej(oczywiście w nagłówkowym klasy pochodnej ładuję nagłówkowy bazowej). |
|
kampar |
» 2013-11-17 23:09:13 Możesz zadeklarować klasę B przed klasą A: class B;
class A { ... };
class B { ... }
|
|
rafixxx25 Temat założony przez niniejszego użytkownika |
» 2013-11-18 06:12:40 No właśnie: for( std::list < Pochodna >::iterator i = pochodnaLista.begin(); i != pochodnaLista.end(); i++ ) { i->getPosition().x; }
1>bazowa.cpp(135): error C2027: use of undefined type 'Pochodna' 1> (...)\bazowa.hpp(5) : see declaration of 'Pochodna' 1>bazowa.cpp(135): error C2039: 'getPosition' : is not a member of 'std::_List_iterator<_Mylist>' 1> with 1> [ 1> _Mylist=std::_List_val<Pochodna,std::allocator<Pochodna>> 1> ] 1>bazowa.cpp(135): error C2228: left of '.x' must have class/struct/union
Samo zadeklarowanie klasy pochodnej przed bazową nie pozwala mi na używanie funkcji klasy pochodnej. Użycie takiej samej konstrukcji tylko w pliku, który ma działa dobrze, ale potrzebuje użyć jej w pliku bazowa.cpp. |
|
Monika90 |
» 2013-11-18 08:40:50 A dlaczego tak chcesz zrobić? Bo dla mnie to wgląda dziwnie. Najlepiej unikać takich cyklicznych zależności. A prawidłowa kolejność deklaracji i definicji jest taka: class B;
class A { public: void f( B ); };
class B : public A { public: void g(); };
void A::f( B b ) { b.g(); }
void B::g() { }
|
|
rafixxx25 Temat założony przez niniejszego użytkownika |
» 2013-11-18 19:37:40 Nie pomyślałem o tym, żeby zadeklarować w nagłówkowym klasy bazowej, a w pliku .cpp załączyć plik nagłówkowy klasy pochodnej... Dzięki. |
|
« 1 » |