我的代码存在以下问题:
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]
作品。
有人知道为什么吗?
Answers:
在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
)非常有用。