Agregacja i dostanie się do pól obiektu
Ostatnio zmodyfikowano 2015-01-22 15:53
xast Temat założony przez niniejszego użytkownika |
Agregacja i dostanie się do pól obiektu » 2015-01-21 17:01:50 Witam. Napisałem taki schemat klas: Wolumen - klasa abstrakcyja Ksiazka - klasa dziedziczy po Wolumenie Bibliteka - klasa zawiera tablice obiektów typu 'Ksiazka' Nie mogę sobie poradzić, by napisać metodę w klasie Biblioteka, która 'dobiera się' do pól klasy Ksiazka. Oto kody poszczególnych klas: #include "stdafx.h" #include "stdlib.h" #include <iostream>
using namespace std;
class Ksiazka;
class Biblioteka { public: Ksiazka * spis[ 4 ]; void dodajKsiazke( Ksiazka & ksiazka ); void pokazKsiazke(); };
void Biblioteka::dodajKsiazke( Ksiazka & ksiazka ) { spis[ 0 ] = & ksiazka; }
void Biblioteka::pokazKsiazke() { cout << "Autor :" << spis[ 0 ]->getAutor(); }
class Wolumen { protected: char tytul[ 30 ]; char autor[ 40 ]; int iloscStron; int cena; public: int getCena() { return cena; }; int getIloscStrin() { return iloscStron; }; char * getTytul() { return tytul; }; char * getAutor() { return autor; }; virtual void spojrzNaWolumen() = 0; };
class Ksiazka : public Wolumen { public: Ksiazka( char * tytul, char * autor, int ilosc_stron, int cena ); virtual void spojrzNaWolumen(); void looknijNaKsiazke( Ksiazka ksiega ); }; Ksiazka::Ksiazka( char * tyt, char * aut, int ilosc_stron, int cena ) { strcpy( tytul, tyt ); strcpy( autor, aut ); this->iloscStron = iloscStron; this->cena = cena; } void Ksiazka::spojrzNaWolumen() { cout << "Jest to ksiazka o tytule: " << getTytul();; } void Ksiazka::looknijNaKsiazke( Ksiazka ksiega ) { cout << "Jest to ksiazka o tytule: " << ksiega.getTytul(); }
Błąd wyrzucany przez kompilator: 'error C2027: use of undefined type 'Ksiazka' 'error C2227: left of \->getAutor' must point to class/struct/union/generic type' Zastanawia mnie fakt, że jak już w main() uruchomię sobie program, dodam Książkę, użyję metody: biblioteka.dodajKsiazke(ksiazka); to wywołanie: cout << biblioteka.spis[0]->getAutor(); - podaje prawidłowy wynik |
|
pekfos |
» 2015-01-21 17:17:40 Kompilator o typie Ksiazka wie tylko tyle, że jest. To o wiele za mało, byś mógł napisać taki kod, jaki chcesz. |
|
xast Temat założony przez niniejszego użytkownika |
» 2015-01-22 09:29:31 Pekfos - dzięki wielkie. Zmieniłem kolejność i umieściłem klasę Biblioteka na samym dole i działa. Teraz rozbiję to na pliki ( w sensie klasy w osobnych plikach) i to powinno chyba rozwiązać problem.
A może mi ktoś wytłumaczyć, czemu deklaracja zapowiadająca to jest za mało? Czy jak umieszczę klasy Wolumen i Ksiazka w osobnych plikach a potem dodam je jako plik nagłówkowy do klasy Biblioteka to ta klasa (Biblioteka) będzie wiedziała już wszystko o umieszczonych w plikach nagłówkowych klasach?
Dzięki za odpowiedź. |
|
pekfos |
» 2015-01-22 10:39:40 A może mi ktoś wytłumaczyć, czemu deklaracja zapowiadająca to jest za mało? |
Kompilator o typie Ksiazka wie tylko tyle, że jest. |
..więc jak niby ma sprawdzić, jakie w tym typie są metody i z jakimi argumentami..? |
|
xast Temat założony przez niniejszego użytkownika |
» 2015-01-22 15:53:48 Dzięki :) |
|
« 1 » |