In C++, gli array di lunghezza variabile non sono legali. G ++ permette questo come una "estensione" (perché C permette), quindi in G ++ (senza essere -pedantic
di seguire lo standard C++), si può fare:
int n = 10;
double a[n]; // Legal in g++ (with extensions), illegal in proper C++
Se si desidera una "matrice di lunghezza variabile" (meglio chiamato un "allineamento dimensioni in modo dinamico" in C++, in quanto adeguati gli array di lunghezza variabile non sono ammessi), hai per allocare dinamicamente la memoria da soli:
int n = 10;
double* a = new double[n]; // Don't forget to delete [] a; when you're done!
o, meglio ancora, usare un contenitore standard:
int n = 10;
std::vector<double> a(n); // Don't forget to #include <vector>
Se si vuole ancora un allineamento corretto, è possibile utilizzare una costante , non un variabile, durante la creazione di esso:
const int n = 10;
double a[n]; // now valid, since n isn't a variable (it's a compile time constant)
Allo stesso modo, se si vuole ottenere la dimensione da una funzione in C + +11, è possibile utilizzare uno constexpr
:
constexpr int n()
{
return 10;
}
double a[n()]; // n() is a compile time constant expression
Sarebbe utile dare una lingua. In C++ gli array di quella forma devono avere una dimensione costante in fase di compilazione. – OrangeAlmondSoap
C++, usando i Codeblock con il compilatore mingw32-g ++! – msmf14
Grazie, Justin e @AndrewVarnerin, questo l'ha risolto! aggiunto const prima dell'int: const int n = 10; Risolto! – msmf14