Problem z funkcją zaprzyjaźnioną
Ostatnio zmodyfikowano 2014-11-15 02:16
VESPERUS Temat założony przez niniejszego użytkownika |
Problem z funkcją zaprzyjaźnioną » 2014-11-14 22:32:06 Witam, Posiadam klasę abstrakcyjną "Klient" oraz klasę "Vip" dziedziczącą po niej. Chciałem zrobić funkcję zaprzyjaźnioną, która będzie modyfikowała zmienne prywatne, które klasa pochodna dziedziczy z abstrakcyjnej. Dodałem więc class Vip : public Klient { private: friend void ukradnij( Vip & );
napisałem funkcję void ukradnij( Vip & obiekt ) { obiekt.pieniadze = obiekt.pieniadze - 50.00; }
i okazuje się że funkcja działa tylko gdy tworzę klasę pochodną statycznie Działa: Vip p1( wektor ); p1.wpisz_dane( "Roman", "Szybki", "Leszno", "11", "22-782", 200.00 ); ukradnij( p1 );
Nie działa: Klient * p2 = new Vip( wektor ); p2->wpisz_dane( "Krzysztof", "Milski", "Obra", "56", "11-221", 100.00 ); ukradnij( p2 );
W wektorze trzymam wszystkie obiekty,a podaje jako argument w konstruktorze tylko dlatego że potrzebuje go do sprawdzenia pewnych wartości (nie istotne dla tego problemu) vector < Klient *> wektor;
Błąd który otrzymuję to: main.cpp:59:16: error: invalid initialization of reference of type ‘Vip&’ from expression of type ‘Klient*’ ukradnij(p2); ^ main.cpp:23:7: error: in passing argument 1 of ‘void ukradnij(Vip&)’ void ukradnij(Vip& obiekt)
Z góry dziękuję za pomoc |
|
michal11 |
» 2014-11-15 02:05:53 Czytaj błędy to będziesz wiedział o co chodzi. Przekazujesz do funkcji wskaźnik zamiast obiektu. Dodaj gwiazdkę przed p2 i powinno być ok. |
|
VESPERUS Temat założony przez niniejszego użytkownika |
» 2014-11-15 02:16:10 Znalazłem rozwiązanie po pierwsze w klasie abstrakcyjnej trzeba podać że funkcja jest przyjacielem a nie w pochodnych i dodatkowo zmienić referencję na wskaźnik, teraz wszystko działa friend void ukradnij( Klient * );
|
|
« 1 » |