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

[c++] Konstruktor w dziedziczeniu

Ostatnio zmodyfikowano 2023-11-18 15:46
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
[c++] Konstruktor w dziedziczeniu
» 2023-11-14 19:10:32
Witam. Mam dwie klasy button oraz textButton. Obie klasy sa bardzo podobne, z tym że ta druga posiada rownież tekst, tak więc klasa textButton dziedziczy po button. Chcialbym, aby konstruktor klasy textButton wykonał to co konstruktor klasy bazowej plus np. prxypisał tekst. Jak napisać taki konstruktor?

C/C++
class button
{
public:
   
float x, y, w, h; // x, y, width, height
   
float r, g, b, a; // color of button
   
bool pressed; // button is pressed ?
   
float pr, pg, pb, pa; // color of pressed button
   
button * next;
   
   
button( float, float, float, float );
   
~button();
   
void setColor( float, float, float, float );
   
void setPressedColor( float, float, float, float );
   
   
bool press( float, float );
};

class textButton
    : public button
{
public:
   
text * t;
   
   
textButton( float, float, float, float, string );
   
~textButton();
   
virtual void render();
   
};

///////////////////////////////////////////

button::button( float x, float y, float width, float height )
{
   
this->x = x;
   
this->y = y;
   
this->w = width;
   
this->h = height;
   
   
// color of button
   
r = 64.0f;
   
g = 64.0f;
   
b = 64.0f;
   
a = 256.0f;
   
   
// pressed and color of pressed button
   
pressed = false;
   
pr = 80.0f;
   
pg = 80.0f;
   
pb = 80.0f;
   
pa = 256.0f;
   
   
next = NULL;
}

// ... --- ... // HELP

textButton::textButton( float x, float y, float width, float height, string txt )
    :
button( x, y, width, height )
{
   
//t = new text( txt );
}
P-180441
pekfos
» 2023-11-14 23:05:27
A co było nie tak z kodem który podałeś? Sam sobie odpowiedziałeś.
P-180442
tBane
Temat założony przez niniejszego użytkownika
» 2023-11-15 16:08:29
Otóż dostaje taki komunikat

/data/user/0/ru.iiec.cxxdroid/files/bin/ld: /data/user/0/ru.iiec.cxxdroid/cache/iiec_tmp_source_file-15d357.o: in function `textButton::textButton(float, float, float, float)':
iiec_tmp_source_file.txt:(.text+0x19c8): undefined reference to `vtable for textButton'
/data/user/0/ru.iiec.cxxdroid/files/bin/ld: iiec_tmp_source_file.txt:(.text+0x19cc): undefined reference to `vtable for textButton'
clang-9: error: linker command failed with exit code 1 (use -v to see invocation)
P-180443
pekfos
» 2023-11-15 18:32:00
Obstawiam że nie masz implementacji dla textButton::render(). To jedyna wirtualna metoda w tym kodzie, więc po prostu ją usuń. Albo ją zaimplementuj, ale wyraźnie nie jest używana do niczego.
P-180444
tBane
Temat założony przez niniejszego użytkownika
» 2023-11-15 18:46:10
Miałeś rację pekfos. Zakomentowalem metodę render(), i zadziałało. Dziwny błąd..
P-180445
pekfos
» 2023-11-15 19:24:03
Vtable zawiera adresy wszystkich metod wirtualnych w klasie. Jak nie masz w pliku implementacji żadnej metody wirtualnej, to kompilator zakłada że vtable też jest zdefiniowane w innym pliku, stąd ten błąd. Jakby brakowało implementacji do 1 z N>1 metod to by było undefined reference do konkretnej metody.
P-180446
tBane
Temat założony przez niniejszego użytkownika
» 2023-11-15 19:50:27
Spróbuję to zapamiętać. W każdym bądź razie działają teraz przyciski z tekstem na bazie zwykłych przyciskowy :-)

https://drive.google.com/file/d/11yk1jkifZY3GZ8vuTjoO0jjgGmQphSBa/view?usp=drivesdk
P-180447
« 1 »
  Strona 1 z 1