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

Użycie obiektu klasy pochodnej w klasie bazowej

Ostatnio zmodyfikowano 2012-10-24 17:39
Autor Wiadomość
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
C/C++
#pragma once
#include "gui.h"


class Menu
    : public Gui
{
public:
    Menu( void );
    virtual ~Menu( void );
    void Wyswietl( SDL_Surface *& ekran );
   
   
   
};
Menu.cpp
C/C++
#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
C/C++
#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
C/C++
#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
P-67356
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...?

C/C++
Przycisk::Przycisk( void )
{
    button = NULL;
    tlo = NULL;
    Przycisk * Przycisk1 = new Przycisk; // błąd
}

P-67358
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:
C/C++
Przycisk::Przycisk( void )
{
    button = NULL;
    tlo = NULL;
    Przycisk * Przycisk1 = new Przycisk;
}

crash był szybszy :-)
P-67359
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.
P-67369
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 :)
P-67382
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ą.
P-67383
« 1 »
  Strona 1 z 1