コードに次の問題があります。
int n = 10;
double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
次のエラーを返します。
error: variable-sized object 'tenorData' may not be initialized
使用はdouble tenorData[10]
動作しますが。
誰もが理由を知っていますか?
コードに次の問題があります。
int n = 10;
double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
次のエラーを返します。
error: variable-sized object 'tenorData' may not be initialized
使用はdouble tenorData[10]
動作しますが。
誰もが理由を知っていますか?
回答:
C ++では、可変長配列は無効です。G ++ではこれを「拡張機能」として許可しているため(Cでは許可されているため)、G ++では(-pedantic
C ++標準に従わなくても)次のことができます。
int n = 10;
double a[n]; // Legal in g++ (with extensions), illegal in proper C++
「可変長配列」(適切な可変長配列は許可されていないため、C ++では「動的サイズ配列」と呼ばれる方がよい)が必要な場合は、自分でメモリを動的に割り当てる必要があります。
int n = 10;
double* a = new double[n]; // Don't forget to delete [] a; when you're done!
または、さらに良いことに、標準のコンテナを使用します。
int n = 10;
std::vector<double> a(n); // Don't forget to #include <vector>
それでも適切な配列が必要な場合は、作成時に変数ではなく定数を使用できます。
const int n = 10;
double a[n]; // now valid, since n isn't a variable (it's a compile time constant)
同様に、C ++ 11の関数からサイズを取得する場合は、constexpr
:を使用できます。
constexpr int n()
{
return 10;
}
double a[n()]; // n() is a compile time constant expression
vector
は非常に便利です。