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

Stała PI z math.h nie działa.

Object Storage Arubacloud
0 głosów
5,591 wizyt
pytanie zadane 28 grudnia 2017 w C i C++ przez KacperO Nowicjusz (210 p.)
edycja 28 grudnia 2017 przez KacperO

Witam właśnie jestem po przerobieniu 5. odcinka kursu obiektowego C++ pana Mirosława, więc zasiadłem do zrobienia zadania domowego z tego filmu. Gdy chciąłem skompilować program napisany na tym filmie ujrzałem taki komunikat: 

Z racji że jakiś miesiąc temu zacząłem też czytać Opus Magnum C++11 myślę, że naturalna jest rzeczą, że wymieniłem domyślny kompilator Code::Blocks na obsługujący C++11 (TDM-GCC-32) i wiedząc to jedną z pierwszych rzeczy które zrobiłem było ręczne przywrócenie tego pierworodnego, gdy to nie pomogło, ponownie wgrałem ten poprzedni. Wiem, że prawdopodobnie najłatwiej byłoby preinstalować Code::Blocks'a, ale ja jednak wolałbym znac przyczynę problemu na przyszłość. Z góry zaznaczam też, że pozostałe "właściwości" biblioteki math.h działają poprawnie, typu potęgowanie, wartość bezwzględna itp.. 

Przepraszam też za ewentualne niedopowiedzenia, ale gdyby takie były proszę o upomnienie mnie. 

Z góry dziękuje :)

 

Edit:  A tutaj kod:

#include <iostream>
#include <math.h>

using namespace std;

class Punkt
{
   float x,y;
   string nazwa;

public:
   void wyswietl()
   {
      cout<<nazwa<<"("<<x<<","<<y<<")"<<endl;
   }
   Punkt(string n="S", float a=0, float b=0)
   {
      nazwa = n;
      x = a;
      y = b;
   }
};

class Kolo :public Punkt //klasa Kolo dziedziczy publicznie z klasy Punkt
{
   float r;
   string nazwa;

public:
   void wyswietl()
   {
      cout<<"Kolo o nazwie: "<<nazwa<<endl;
      cout<<"Srodek kola: "<<endl;
      Punkt::wyswietl();
      cout<<"Promien: "<<r<<endl;
      cout<<"Pole kola : "<<M_PI*r*r<<endl;
   }

   Kolo(string nk="Kolko", string np="S", float a=0, float b=0, float pr=1)
   :Punkt(np,a,b)
   {
      nazwa = nk;
      r = pr;
   }
};


int main()
{
    Kolo k1;
    k1.wyswietl();

    return 0;
}

 

komentarz 28 grudnia 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Proszę wstawiać kody źródłowe w postaci tekstu (podczas zakładania pytania masz link do krótkiego poradnika, który znajduje się w FAQ). Dlaczego?

  1. Ja mogę sobie skopiować Twój kod i skompilować u mnie
  2. Jest to z pewnością czytelniejsze niż mały (bo silnik naszego forum coś zmniejsza rozmiary obrazków) zrzut ekranu.
komentarz 28 grudnia 2017 przez KacperO Nowicjusz (210 p.)
Tak wiem, czytałem FAQ, ale nie wystarczy link przekierowywujący do filmu, który kolejno z opisu przekierowywuje do pliku zawierającego kod? Ale gdyby to było takie ważne zawsze mogę dokleić kod.
komentarz 28 grudnia 2017 przez draghan VIP (106,230 p.)

nie wystarczy link przekierowywujący do filmu, który kolejno z opisu przekierowywuje do pliku zawierającego kod?

Tak średnio to wygląda. Nie wpadłbym na to, że aby dostać kod muszę wejść w link do filmu. ;)

komentarz 28 grudnia 2017 przez KacperO Nowicjusz (210 p.)

No to żeby nie było to już doklejam. smiley

komentarz 28 grudnia 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

No to teraz mogę Ci powiedzieć: "u mnie działa" laugh

komentarz 28 grudnia 2017 przez KacperO Nowicjusz (210 p.)
A u mnie właśnie nie działa i nie wiem co teraz robić, czy reinstalować, czy kombinować dalej, czy może to zignorować... Hmm
1
komentarz 28 grudnia 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Jak koledzy wcześniej wspomnieli, M_PI nie jest częścią standardu C++, a więc nie musi być częścią kompilatora. Użyj jednego z rozwiązań, które wcześniej Ci przedstawiono. Stworzenie własnej stałej to chyba najlepsze rozwiązanie.
komentarz 28 grudnia 2017 przez KacperO Nowicjusz (210 p.)
A czy mógłbyś mi powiedzieć jakiego używasz kompilatora?
1
komentarz 28 grudnia 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
GCC 7.2.1 na Linuksie
komentarz 28 grudnia 2017 przez KacperO Nowicjusz (210 p.)
Ok dziękuje :)

2 odpowiedzi

+4 głosów
odpowiedź 28 grudnia 2017 przez Arkadiusz Sikorski Pasjonat (20,160 p.)

Skoro piszesz kod C++, to warto byłoby używać cmath zamiast math.h.

Spróbuj 

#define _USE_MATH_DEFINES
#include <cmath>

(zachowując kolejność).

 

A jak to nie pomoże, to zawsze możesz ręcznie zdefiniować stałe...

#define M_PI 3.14159265358979323846
// lub
const double M_PI = 3.14159265358979323846;

Poza tym, o ile pamiętam, to C::B używa domyślnie kompilatora GCC, który obsługuje C++11.

komentarz 28 grudnia 2017 przez KacperO Nowicjusz (210 p.)
Dziękuje, choć wolałbym bardziej jakiś sposób jak naprawić bibliotekę cmath/math.h, ale jak mawiają "Trza brać co dają" ;)
1
komentarz 28 grudnia 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

W swojej najnowszej wersji kompilator GCC obsługuje "nawet" C++17 wink

komentarz 28 grudnia 2017 przez draghan VIP (106,230 p.)
Wątpię, żeby C::B używał najnowszego GCC, Eryku.
1
komentarz 28 grudnia 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Code::Blocks to tylko IDE, nie musi być sztywno powiązane z kompilatorem w konkretnej jego wersji. Zawsze można zainstalować osobno najnowszą wersję MinGW wink

komentarz 28 grudnia 2017 przez draghan VIP (106,230 p.)
Co też autor uczynił - doinstalował inną wersję. Arkadiusz Sikorski mówił przecież o tym, co jest out of the box.
+2 głosów
odpowiedź 28 grudnia 2017 przez the_danger Gaduła (4,800 p.)

Stała M_PI nie należy do standardu, ale niektóre kompilatory dodają ją jako rozszerzenie. Zdefiniuj ją sam:

constexpr double M_PI {3.14159265358979323846};

btw. używaj cmath zamiast math.h

Podobne pytania

0 głosów
1 odpowiedź 664 wizyt
pytanie zadane 21 kwietnia 2019 w C i C++ przez Ebay_05 Początkujący (400 p.)
0 głosów
2 odpowiedzi 415 wizyt
pytanie zadane 22 października 2020 w C i C++ przez urbix01 Gaduła (3,290 p.)
0 głosów
1 odpowiedź 264 wizyt
pytanie zadane 22 listopada 2018 w C i C++ przez Wiktor Panecki Użytkownik (920 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,966 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!

...