我基本上有
int x;
cout << "Please enter how many classrooms there are: ";
cin >> x;
classrooms bunchaClassrooms[x]; //classrooms is a previously declared class.
由于某些原因,它会给出错误:“变长数组的非POD元素类型'x'”,我不知道为什么,如果我要使用一个班级的向量,如何根据用户的输入轻松填充它(我猜想使用for循环)。
我基本上有
int x;
cout << "Please enter how many classrooms there are: ";
cin >> x;
classrooms bunchaClassrooms[x]; //classrooms is a previously declared class.
由于某些原因,它会给出错误:“变长数组的非POD元素类型'x'”,我不知道为什么,如果我要使用一个班级的向量,如何根据用户的输入轻松填充它(我猜想使用for循环)。
您可以使用std::vector:
std::vector<classrooms> bunchaClassrooms;
for (int i = 0; i < x; ++i)
{
classrooms c;
<... enter classrooms info ...>
v.push_back(c);
}
非常量边界的数组不太好。
push_back()
之前,不要调用resize()
(但可以调用reserve()
来避免重新分配内存)。另一种方法是调用resize()
,或者直接使用计数构造向量,然后赋值v[i] = c;
,这更接近于使用数组的方式。 - gx_变长数组不是该语言的标准特性。您需要在堆上分配内存或创建向量。
-std=c++11 -pedantic-errors
(或-std=c++98 -pedantic-errors
)编译,它会拒绝它:error: ISO C++ forbids variable length array ‘bunchaClassrooms’ [-Wvla]
。(顺便说一下,针对你的第一个问题,考虑到原始的错误信息,我认为OP正在使用Clang。) - gx_