Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Odwoływanie się 2 klas między sobą

Ostatnio zmodyfikowano 2013-11-18 19:37
Autor Wiadomość
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:
C/C++
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ć?
P-96499
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.
P-96514
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).
P-96517
kampar
» 2013-11-17 23:09:13
Możesz zadeklarować klasę B przed klasą A:
C/C++
class B;

class A
{
    ...
};

class B
{
    ...
}
P-96525
rafixxx25
Temat założony przez niniejszego użytkownika
» 2013-11-18 06:12:40
No właśnie:
C/C++
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
C/C++
#include "pochodna.hpp"
działa dobrze, ale potrzebuje użyć jej w pliku bazowa.cpp.
P-96530
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:
C/C++
class B; //deklaracja klasy

class A //definicja klasy
{
public:
    void f( B ); //deklaracja funkcji składowej
};

class B
    : public A
{
public:
    void g(); //deklaracja f. składowej
};

//definicje f. składowych
//jeżeli mają być w pliku nagłówkowym to trzeba dodać atrybut inline
void A::f( B b ) { b.g(); }

void B::g() { }

P-96531
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.
P-96601
« 1 »
  Strona 1 z 1