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

Błąd w metodach lub wskaźnikach

Object Storage Arubacloud
0 głosów
216 wizyt
pytanie zadane 15 lutego 2022 w C i C++ przez Ciasteczko:) Początkujący (490 p.)

Wywala błąd w 29 i 31 linijce: undefined reference to 'Dimensions::calculate();'

#include <iostream>
using namespace std;
class Dimensions {
 protected:
 float PI = '3,14';
 float radius;
 public:
 void setRadius(int p_r){
     radius=p_r;
 }
 void calculate();
};
class CircleArea: public Dimensions {
 public:
 virtual void calculate(){
     cout<< "Pole wynosi: "<< 2*PI*radius*radius << endl;
 }
};
class CircumferenceCircle: public Dimensions {
 public:
 virtual void calculate(){
     cout<< "Obwod wynosi: "<< 2*PI*radius << endl;
 }
};
int main_test() {
    Dimensions *circle_one = new CircleArea;
    Dimensions *circle_two = new CircumferenceCircle;
    circle_one->setRadius(4);
    circle_one->calculate();// tutaj
    circle_two->setRadius(4);
    circle_two->calculate();// i tutaj

 return 0;
}


 

komentarz 15 lutego 2022 przez Oscar Nałogowiec (29,290 p.)

A to:

 float PI = '3,14';

się w ogóle kompiluje?

Metody Dimensions::calculate() też nie masz - to co jest to tylko nagłówek.

Jeśli ona ma być virtual to musi taka być od klasy bazowej. Jeśli klasa bazowa może być abstrakcyjna to po nagłówku = 0;

 

1 odpowiedź

0 głosów
odpowiedź 15 lutego 2022 przez Whiskey_Taster Pasjonat (15,610 p.)
wybrane 15 lutego 2022 przez Ciasteczko:)
 
Najlepsza

Błąd to jest w zrozumieniu. Już w piątej linijce masz źle, bo Twoją intencją jest, by PI = 3.14, a zamiast tego masz jakieś tam konwersje, ponieważ poprawnie powinno być:
 

float PI = 3.14;

a raczej const float, bo jak mniemam PI jest liczbą stałą. 

Druga sprawa - źle metody. Virtual leci do klasy rodzica, nie dziecka, stąd można zrobić tak:
 

virtual void calculate() {};

a następnie poprawić obie metody w pozostałych klasach. 

Ponadto, pierwszy błąd (z float) pociąga za sobą inne rzeczy, na przykład źle będzie wyliczane pole oraz obwód. W dodatku warto zauważyć, że od strony matematycznej wzór na pole powinien być inny. W tej formie dostajesz dwukrotność pola. 

Ogółem polecam się zapoznać z materiałem pod tym linkiem. Może i nie jest najprostsze, ale to jak cały C++. 

Podobne pytania

0 głosów
1 odpowiedź 791 wizyt
pytanie zadane 28 lutego 2017 w PHP przez Mateusz Arabczyk Początkujący (450 p.)
0 głosów
0 odpowiedzi 244 wizyt
pytanie zadane 23 lutego 2018 w PHP przez Janusz Pierzchalski Początkujący (430 p.)
0 głosów
2 odpowiedzi 113 wizyt
pytanie zadane 4 lipca 2019 w C i C++ przez colddog Nowicjusz (140 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...