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

Problem z destruktorem

VPS Starter Arubacloud
0 głosów
125 wizyt
pytanie zadane 13 stycznia 2021 w C i C++ przez KitKetPolska Nowicjusz (240 p.)
#include <iostream>
#define LICZBA_ELEMENTOW 5

using namespace std;

class element {
  protected:
    double prad;
    double napiecie;
    double moc;
    double czestotliwosc;
    std::string nazwa;
  public:
    virtual ~element(){};
    element() {nazwa = "element"; czestotliwosc = 1.0; napiecie = prad = moc = 0.0;}
    element(const std::string arg) {nazwa = arg; napiecie = czestotliwosc = 1.0; prad = moc = 0.0;}
    virtual void wymuszenieU(double) = 0;
    friend void obwod(element*, element*);
    virtual void setName();
    virtual void getName();
};

void obwod(element *e1, element *e2) {
  bool pradMatch = false;
  bool napiecieMatch = false;
  if (e1->prad == e2->prad) {
    pradMatch = true;
  }
  if (e1->napiecie == e2->napiecie) {
    napiecieMatch = true;
  }
  if ((pradMatch && !napiecieMatch) || (!pradMatch && napiecieMatch)) {
    //std::string matchType = (pradMatch)?"prad":"napiecie";
    std::string matchType;
    if (pradMatch) {
      matchType = "prad";
    } else {
      matchType = "napiecie";
    }

    cout << "elementy: " << e1->nazwa.c_str() << " oraz: " << e2->nazwa.c_str() << " maja taki sam: " << matchType.c_str() << endl;
  } else {
    if (pradMatch && napiecieMatch) {
      cout << "elementy: " << e1->nazwa.c_str() << " oraz: " << e2->nazwa.c_str() << " sa nieokreslone." << endl;
    } else {
      cout << "elementy: " << e1->nazwa.c_str() << " oraz: " << e2->nazwa.c_str() << " sa nie polaczone." << endl;
    }
  }
}

class cewka : public element {
  protected:
    double L;
  public:
   // ~cewka();
    cewka() {nazwa = "cewka"; L = 1.0;}
    cewka(const std::string arg) {nazwa = arg; L = 1.0;}
    cewka(const std::string arg, double argL) {nazwa = arg; L = argL;}
    void wymuszenieU(double);
    void setName();
    void getName();
};

void cewka::setName(){
cout << "Podaj nazwê elementu cewki: " << endl;
cin >> nazwa;
}

void cewka::getName(){
cout << "Nazwa cewki to: " << nazwa << endl;
}

class rezystor : public element {
    double R;
public:
    rezystor() {nazwa = "rezystor"; R = 1.0;}
    rezystor(const string arg) {nazwa = arg; R = 1.0;}
    rezystor(const string arg, double argR) {nazwa = arg; R = argR;}
    void setName();
    void getName();
};

class kondensator : public element {
    double C;
public:
    kondensator() {nazwa = "kondensator"; C = 1.0;}
    kondensator(const string arg) {nazwa = arg; C = 1.0;}
    kondensator(const string arg, double argC) {nazwa = arg; C = argC;}
    void setName();
    void getName();
};

void cewka::wymuszenieU(double u) {
  napiecie = u;
  if (czestotliwosc > 0.0) {
    prad = u/(6.28*czestotliwosc*L);
  }
}

int main() {

  element* tab[LICZBA_ELEMENTOW];
  for (int i=0; i<(LICZBA_ELEMENTOW); i++) {
    tab[0] = new cewka("cewka1");
  }
  tab[0] = new cewka("cewka1");
  tab[1] = new cewka("cewka2", 3.0);
  tab[2] = new cewka("cewka3");
  tab[3] = new cewka("cewka4", 3.0);
  tab[4] = new cewka("cewka5", 3.0);
  tab[0]->wymuszenieU(5);
  tab[1]->wymuszenieU(5);
  for (int i=0; i<(LICZBA_ELEMENTOW-1); i++) {
    for (int j=i+1; j<LICZBA_ELEMENTOW; j++) {
      obwod(tab[i], tab[j]);
    }
  }
  for (int i=0; i<LICZBA_ELEMENTOW; i++) {
    delete tab[i];
  }
  return 0;
}

Po próbie skompilowania programu wyświetla się komunikat "undefined reference to 'vtable for element' " i nie mam pojęcia jak do tego podejść. z góry dziękuje :) 

1 odpowiedź

+1 głos
odpowiedź 13 stycznia 2021 przez tangarr Mędrzec (155,080 p.)
wybrane 13 stycznia 2021 przez KitKetPolska
 
Najlepsza
Funkcje element::setName oraz element::getName są niezdefiniowane.
Zdefiniuj je, lub przerób na czysto wirtualne.

Podobne pytania

0 głosów
1 odpowiedź 296 wizyt
pytanie zadane 17 kwietnia 2021 w C i C++ przez Paweł Środek Nowicjusz (200 p.)

92,847 zapytań

141,790 odpowiedzi

320,878 komentarzy

62,181 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...