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

question-closed Statyczne stałe symboloiczne typu double/float w klasie

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
143 wizyt
pytanie zadane 12 kwietnia 2018 w C i C++ przez Jakub 0 Pasjonat (23,100 p.)
zamknięte 12 kwietnia 2018 przez Jakub 0

Hej, mam taką klasę:

class Cube{
    static const int c = 10;
public:
    auto f(){
        return c;
    }
};

Wszystko jest ok, ale gdy napiszę:

class Cube{
    static const double c = 10.0;
public:
    auto f(){
        return c;
    }
};

To jest już błąd kompilacji. Książka o tym wspomina ale nie mówi dlaczego tak jest. Czemu nie możemy zainicjalizować statycznej stałej typu zmiennoprzecinkowego w deklaracji klasy? Czy da się to jakoś obejść?

Serdecznie dziękuje za pomoc ;)

komentarz zamknięcia: już znam wytłumaczenie

3 odpowiedzi

+2 głosów
odpowiedź 12 kwietnia 2018 przez Patryk Krajewski Nałogowiec (26,180 p.)
wybrane 12 kwietnia 2018 przez Jakub 0
 
Najlepsza
To co znalazłem https://stackoverflow.com/questions/13697265/static-const-double-cannot-have-an-in-class-initializer-why-is-it-so Kompiluj ze standardem c++11 lub większym i będzie działało.
komentarz 12 kwietnia 2018 przez Jakub 0 Pasjonat (23,100 p.)
Używam standardu c++ 17 :/
komentarz 12 kwietnia 2018 przez Hiskiel Pasjonat (22,850 p.)
Tutaj jest kompatybilność wsteczna.
+1 głos
odpowiedź 12 kwietnia 2018 przez niezalogowany

link

Czyli należałoby stosować constexpr (a nie const), albo inicjować poza deklaracją klasy.

komentarz 12 kwietnia 2018 przez Jakub 0 Pasjonat (23,100 p.)

Zrobiłem tak:

class Cube{
    static constexpr double c = 10;
public:
    auto f(){
        return c;
    }
};

Jest ok, ale bez static:

class Cube{
    constexpr double c = 10;
public:
    auto f(){
        return c;
    }
};

jest błąd. Danie zamiast constexpr const załatwia sprawę. Z tego co wiem constexpr służy do tego że wartość inicjalizująca musi być znana już podczas kompilacji. Dlaczego jednak użycie w klasie constexpr bez static powoduje błąd? To dlatego że ta stała powstanie dopiero po deklaracji obiektu a musi być znana od początku?

1
komentarz 12 kwietnia 2018 przez niezalogowany
Tak. Będzie istnieć dopiero od momentu stworzenia instancji, więc nie może być constexpr.
0 głosów
odpowiedź 12 kwietnia 2018 przez mokrowski Mędrzec (151,300 p.)

C++14 bo auto w Cube::f() jest dedukowane poprawnie od tego standardu.

#include <iostream>

class Cube{
public:
    auto f(){
        return c;
    }
private:
    constexpr static double c = 10.3;
};

int main() {
    Cube cube;
    std::cout << cube.f() <<'\n';
}

 

komentarz 12 kwietnia 2018 przez Jakub 0 Pasjonat (23,100 p.)
Nie rozumiem, że ja korzystam z c++14 ?
komentarz 12 kwietnia 2018 przez mokrowski Mędrzec (151,300 p.)
Jakr chcesz mieć typ zwracany auto to c++14 lub nowszy.
komentarz 12 kwietnia 2018 przez Jakub 0 Pasjonat (23,100 p.)
To napisałem że korzystam z c++17 ;)

Podobne pytania

0 głosów
1 odpowiedź 127 wizyt
pytanie zadane 27 czerwca 2018 w C# przez DODO Bywalec (2,950 p.)
0 głosów
1 odpowiedź 118 wizyt
pytanie zadane 23 grudnia 2017 w C i C++ przez Kubaluk Nowicjusz (120 p.)
0 głosów
1 odpowiedź 113 wizyt
pytanie zadane 3 kwietnia 2018 w JavaScript przez JSJerry Początkujący (260 p.)

89,727 zapytań

138,332 odpowiedzi

309,340 komentarzy

59,649 pasjonatów

Advent of Code 2022

Top 15 użytkowników

  1. 429p. - Argeento
  2. 427p. - nidomika
  3. 396p. - Mikbac
  4. 392p. - ssynowiec
  5. 390p. - Łukasz Eckert
  6. 387p. - TheLukaszNs
  7. 386p. - rucin93
  8. 382p. - Marcin Harasimowicz
  9. 382p. - Michal Drewniak
  10. 378p. - JMazurkiewicz
  11. 373p. - tokox
  12. 367p. - Jarosław Roszyk
  13. 362p. - adrian17
  14. 359p. - overcq
  15. 350p. - Mawrok
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...