• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dziedziczenie - Deklaracja konstruktora podklasy

0 głosów
73 wizyt
pytanie zadane 13 sierpnia 2016 w C i C++ przez użytkownika SebekMakaron Użytkownik (960 punkty)

Witam tak naprawdę dopiero wchodzę w obiektowego c++ i napotkałem tak problem:

W jednym pliku wszystko jest dobrze:

class Ksztalt
{
public:
     virtual void oblicz_pole() = 0;
};

class Kolo :public Ksztalt
{
public:
     Kolo(float x)
     {
     r = x;
     }
     virtual void oblicz_pole();
private:
     float r;
};

Lecz jeśli chcę to zrobić tak:

class Ksztalt
{
public:
     virtual void oblicz_pole() = 0;
};

class Kolo :public Ksztalt
{
public:
     Kolo(float x);
     virtual void oblicz_pole();
private:
     float r;
};

Drugi plik:

Kolo::Kolo(float x)
{
     r = x;
}

Pojawia się błąd

undefined reference to `vtable for Kolo`

1 odpowiedź

0 głosów
odpowiedź 13 sierpnia 2016 przez użytkownika maly Nałogowiec (36,030 punkty)
wybrane 13 sierpnia 2016 przez użytkownika SebekMakaron
 
Najlepsza
Brakuje defincji dla wirtualnej metody.
komentarz 13 sierpnia 2016 przez użytkownika SebekMakaron Użytkownik (960 punkty)
Dzięki śmieszny błąd bo myślałem że coś nie tak z konstruktorem. Szukałem problemu tam gdzie go nie było.
komentarz 13 sierpnia 2016 przez użytkownika JAKUBW Dyskutant (9,870 punkty)
To jest c++! Tu zawsze błąd jest gdzie indziej niż pokazuje:)
komentarz 13 sierpnia 2016 przez użytkownika Ehlert Maniak (68,560 punkty)
Co to za herezje? Takie problemy mają ludzie nie używający angielskiego i googla.
komentarz 14 sierpnia 2016 przez użytkownika SebekMakaron Użytkownik (960 punkty)

A co z tym? Przepisałem z książki nie mam pojęcia dlaczego nie działa.

Plik.h

class Porownywalne
{
public:
     virtual ~Porownywalne();
     virtual void rysuj() = 0;
};

class A: public Porownywalne
{
public:
     A();
     virtual ~A();
     virtual void rysuj();
private:
     int *wart;
};

void usunRysowalny(Porownywalne* inny);

 

Plik.cpp

A::A()
{
     wart = new int;
}

void A::rysuj()
{
     cout<<"b";
}

A::~A()
{
     delete wart;
}

void usunRysowalny(Porownywalne* inny)
{
     delete inny;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 127 wizyt
pytanie zadane 3 lipca 2016 w C i C++ przez użytkownika endlesik Nowicjusz (150 punkty)
0 głosów
2 odpowiedzi 104 wizyt
pytanie zadane 6 maja 2016 w C i C++ przez użytkownika Przemek Bywalec (2,470 punkty)
0 głosów
2 odpowiedzi 71 wizyt
pytanie zadane 10 marca 2016 w Java przez użytkownika piekarnik Użytkownik (700 punkty)
...