nie robi się tablic dynamicznych
to nie są tablice dynamiczne! to są zwykłe tablice, tylko że o rozmiarze określonym przez zmienną (jest więc złagodzony warunek że przy deklaracji tablicy jej rozmiar musi być określany stałą). Takiej tablicy raz stworzonej nie da się zmienić rozmiaru, bo jest statyczna.
jest to niezgodne ze standardem
no i? niezgodne ze „standardem” jest wszystko, co wykracza poza aplikację konsolową na poziomie hello worlda.
I jest to, powtarzam po raz n-ty, zgodne ze standardem języka C. standard C++ co prawda tego (przynajmniej jeszcze) nie przewiduje, ale niektóre kompilatory obsługujące taką deklarację tablic w C dopuszczają też tę konstrukcję w C++ (nie ma wielkiego powodu, aby nie dopuszczać).
// coś takiego chciałbym osiągnąć
czyli wyzerować tablicę lokalną? użyj for
.
for (int i=0;i<rozmiar;i++) tab[i]=0;
ale wracając do twojego kodu...
private int rozmiar;
to się nawet nie skompiluje! podawaj działające przykłady, a nie z toną literówek…
int tab[666]=0; //taka inicjalizacja działa
a figa. jakiego kompilatora używasz?
int tab1[this->rozmiar]; // OK
int tab2[666]=0; // a.cpp:13:23: error: array must be initialized with a brace-enclosed initializer
int tab3[this->rozmiar]={0}; // a.cpp:14:35: error: variable-sized object 'tab3' may not be initialized
static int tab[this->rozmiar]={0}; // a.cpp:17:41: error: variable-sized object 'tab' may not be initialized
// a.cpp:17:41: error: storage size of 'tab' isn't constant
wygląda na to, że GCC 4.5.0 nie lubi inicjalizacji takiej tablicy razem z deklaracją (dlatego użyj for
) ani nie przejdzie to jako static
– bo jest konflikt interesów: static oznacza że zmienna jest tak naprawdę globalna tylko ograniczona zasięgiem do danej funkcji, variable-sized oznacza że rozmiar określany jest na nowo przez zmienną podczas każdego wejścia do funkcji według aktualnej wartości tej zmiennej, a że jest to tablica zwykła (nie przydzielana dynamicznie) to podczas jej istnienia rozmiar nie może ulegać zmianie. Są to warunki niemożliwe do spełnienia jednocześnie.