Estou tendo o seguinte problema com meu código:
int n = 10;
double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Retorna o seguinte erro:
error: variable-sized object 'tenorData' may not be initialized
Considerando que usando double tenorData[10]
obras.
Alguém sabe por quê?
c++
arrays
initialization
size
msmf14
fonte
fonte
Respostas:
Em C ++, arrays de comprimento variável não são permitidos. G ++ permite isso como uma "extensão" (porque C permite), portanto, em G ++ (sem
-pedantic
seguir o padrão C ++), você pode fazer:int n = 10; double a[n]; // Legal in g++ (with extensions), illegal in proper C++
Se você quiser uma "matriz de comprimento variável" (melhor chamada de "matriz de tamanho dinâmico" em C ++, uma vez que matrizes de comprimento variável adequadas não são permitidas), você também precisa alocar memória dinamicamente:
int n = 10; double* a = new double[n]; // Don't forget to delete [] a; when you're done!
Ou, melhor ainda, use um contêiner padrão:
int n = 10; std::vector<double> a(n); // Don't forget to #include <vector>
Se você ainda deseja uma matriz adequada, pode usar uma constante , não uma variável , ao criá-la:
const int n = 10; double a[n]; // now valid, since n isn't a variable (it's a compile time constant)
Da mesma forma, se quiser obter o tamanho de uma função em C ++ 11, você pode usar
constexpr
:constexpr int n() { return 10; } double a[n()]; // n() is a compile time constant expression
fonte
vector
, são incrivelmente úteis.