Użycie obiektu klasy pochodnej w klasie bazowej
Ostatnio zmodyfikowano 2012-10-24 17:39
Arturr300 Temat założony przez niniejszego użytkownika |
Użycie obiektu klasy pochodnej w klasie bazowej » 2012-10-23 19:33:08 Witam. Mam problem. Mianowicie: Mam plik Gra.h. Do tego pliku dołączam Menu.h i Przycisk.h. To są klasy: Gra, Menu i Przycisk. W klasie Przycisk tworzę metodę Wyswietl(). W klasie Menu chcę stworzyć kilka obiektów klasy Przycisk,żeby je potem wyświetlić poprzez użycie jednej metody klasy Menu. Czyli po prostu: w menu tworzę przyciski. Więc jak to zrobić? Próbowałem na różne sposoby, ale sypie błędami. Sorry, jeśli źle wyjaśniłem. Kod źródłowy: Menu.h #pragma once #include "gui.h"
class Menu : public Gui { public: Menu( void ); virtual ~Menu( void ); void Wyswietl( SDL_Surface *& ekran ); };
Menu.cpp #include "Menu.h" #include "przycisk.h"
Menu::Menu( void ) { }
Menu::~Menu( void ) { }
void Menu::Wyswietl( SDL_Surface *& ekran ) { extern Przycisk * Przycisk1; SDL_BlitSurface( Przycisk1->button, 0, ekran, 0 ); }
Przycisk.h #pragma once #include "menu.h" class Przycisk : public Menu { public: Przycisk( void ); ~Przycisk( void ); void Wyswietl( SDL_Surface *& ekran ); SDL_Surface * button; SDL_Surface * tlo; };
Przycisk.cpp #include "Przycisk.h"
Przycisk::Przycisk( void ) { button = NULL; tlo = NULL; Przycisk * Przycisk1 = new Przycisk; }
Przycisk::~Przycisk( void ) { }
void Przycisk::Wyswietl( SDL_Surface *& ekran ) { tlo = IMG_Load( "img/menu/bg.png" ); button = IMG_Load( "img/menu/button.png" ); }
P.S. Teraz wyświetla błąd: error LNK2001: unresolved external symbol "class Przycisk * Przycisk1" (?Przycisk1@@3PAVPrzycisk@@A)' Używam VS 2012 Express |
|
crash |
» 2012-10-23 19:55:32 Po co w konstruktorze klasy Przycisk tworzysz obiekt jej samej wywołując przy tym konstruktor, który tworzy obiekt jej samej wywołując konstruktor, który tworzy obiekt jej samej...? Przycisk::Przycisk( void ) { button = NULL; tlo = NULL; Przycisk * Przycisk1 = new Przycisk; }
|
|
cyklopek11 |
» 2012-10-23 19:56:01 Zastanów się co jest źle (i dlaczego z punktu widzenie języka c++) na poniższym obrazku: Przycisk::Przycisk( void ) { button = NULL; tlo = NULL; Przycisk * Przycisk1 = new Przycisk; }
crash był szybszy :-) |
|
jsc |
» 2012-10-24 09:03:45 Nie wydaje mi się żeby tworzenie takich konstrukcji było dobrą praktyką programowania: Lepiej zrób dla menu i przycisku klasę nadrzędną kontrolka. |
|
Arturr300 Temat założony przez niniejszego użytkownika |
a » 2012-10-24 17:33:44 Dzięki wszystkim :D Działa. To: Przycisk* Przycisk1 = new Przycisk; Przeniosłem do metody klasy Menu.
@UP Robię w SDL, a nie winapi :) |
|
jsc |
» 2012-10-24 17:39:43 Robię w SDL, a nie winapi :) |
Jeśli myślisz, że o to mi chodziło to jesteś w błędzie. Mi chodziło mi o metodę programowania, a nie o praktyki pracy z tą czy inną biblioteką. |
|
« 1 » |