Dlaczego deklaracja tablicy w klasie musi mieć podany rozmiar jako zmienna statyczna

0

Cześć !

Mam klasę a w jej .h :

private:
static const int labyrinthDims = 16;
std::array<std::array<sf::RectangleShape, labyrinthDims + 1>, labyrinthDims + 1> Points;

Dlaczego tak jest? Dlaczego samo const int nie wystarcza do deklaracji tablicy?

0

Bo wtedy jest zależne od (dynamicznego) inicjalizatora, a wielkość tablicy musi być znana w czasie kompilacji - tak to jest zdefiniowane w języku. Jak chcesz mieć tablice o dynamicznej długości to użyj std::vector

0

Tak, wiem, że musi być znana.
W tym przypadku to zadziała:

int main() {
const int size = 10;
int tab[size];
}

ale czemu nie w klasie

0
struct dynamic
{
    dynamic(int v): val{v} {}
    const int val;
};

Jaka jest wartość val, czy jest identyczna dla wszystkich instancji klasy i czy znasz ją w czasie kompilacji?

0

Nie jest identyczna i nie znam jej. Dzięki.

0

Tak swoją drogą, w mojej prywatnej opinii z const nie powinno działać nigdzie, ale działa bo przed C++11 nie mieliśmy constexpr

0
kq napisał(a):
struct dynamic
{
    dynamic(int v): val{v} {}
    const int val;
};

Jaka jest wartość val, czy jest identyczna dla wszystkich instancji klasy i czy znasz ją w czasie kompilacji?

Chodzi Ci o wywołanie

int main()
{
dynamic d(5); 
}

a ja mam przecież

struct dynamic
{
    dynamic(int v): val{v} {}
    const int val = 16;
};
0

Ale z perspektywy języka wiele się tu nie zmienia. Wartość val jest traktowana jako nieznana w czasie kompilacji i musi być statyczna.

1 użytkowników online, w tym zalogowanych: 0, gości: 1