ti-enxame.com

Array [n] vs Array [10] - Inicializando arrays com variável versus número real

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 o uso de double tenorData[10] funciona.

Alguém sabe por quê?

63
msmf14

Em C++, matrizes de comprimento variável não são legais. G ++ permite isso como uma "extensão" (porque C permite), então em G ++ (sem ser -pedantic sobre 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 tamanho variável" (melhor chamada de "matriz de tamanhos dinâmicos" em C++, já que matrizes de comprimento variável variável não são permitidas), você terá que alocar dinamicamente a memória por conta própria:

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 quiser um array adequado, você pode usar um constante, não um variável, ao criá-lo:

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 você deseja obter o tamanho de uma função em C++ 11, você pode usar um constexpr:

constexpr int n()
{
    return 10;
}

double a[n()]; // n() is a compile time constant expression
145
Cornstalks