Mam następujący problem z moim kodem:
int n = 10;
double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Zwraca następujący błąd:
error: variable-sized object 'tenorData' may not be initialized
Natomiast używanie double tenorData[10]
działa.
Czy ktoś wie, dlaczego?
c++
arrays
initialization
size
msmf14
źródło
źródło
Odpowiedzi:
W C ++ tablice o zmiennej długości nie są dozwolone. G ++ pozwala na to jako „rozszerzenie” (ponieważ C na to pozwala), więc w G ++ (bez konieczności
-pedantic
przestrzegania standardu C ++) możesz:int n = 10; double a[n]; // Legal in g++ (with extensions), illegal in proper C++
Jeśli chcesz mieć „tablicę o zmiennej długości” (w C ++ lepiej nazywaną „tablicą o zmiennej długości”, ponieważ tablice o zmiennej długości są niedozwolone), musisz samodzielnie przydzielić pamięć dynamicznie:
int n = 10; double* a = new double[n]; // Don't forget to delete [] a; when you're done!
Lub, jeszcze lepiej, użyj standardowego pojemnika:
int n = 10; std::vector<double> a(n); // Don't forget to #include <vector>
Jeśli nadal chcesz mieć odpowiednią tablicę, możesz użyć stałej , a nie zmiennej , podczas jej tworzenia:
const int n = 10; double a[n]; // now valid, since n isn't a variable (it's a compile time constant)
Podobnie, jeśli chcesz uzyskać rozmiar z funkcji w C ++ 11, możesz użyć
constexpr
:constexpr int n() { return 10; } double a[n()]; // n() is a compile time constant expression
źródło
vector
są niesamowicie przydatne.