2013-11-09 55 views
3

我基本上C++:错误:非POD元素类型的可变长度数组

int x; 
cout << "Please enter how many classrooms there are: "; 
cin >> x; 
classrooms bunchaClassrooms[x]; //classrooms is a previously declared class. 

出于某种原因,给出了错误 “非POD元素类型的可变长度数组的‘x’” 和我不知道为什么,如果我要使用教室的矢量,我怎么能根据用户的输入轻松地填充它(使用for循环,我猜测)。

+0

你正在使用哪个编译器? –

+0

只是因为在C++中不允许使用变长数组。 (实际上他们计划用于C++ 14,但最终被转移到研究组。) –

+0

@gx_ GCC正确接受AFAIK。 –

回答

7

您可以使用std ::向量:

std::vector<classrooms> bunchaClassrooms; 
for (int i = 0; i < x; ++i) 
{ 
    classrooms c; 
    <... enter classrooms info ...> 
    v.push_back(c); 
} 

阵列与非恒定边界并不好。

+0

不要忘记正确调整()... –

+1

@ g-makulik在调用push_back()之前,您不能调用'resize()'(但您可以调用reserve()来避免重新分配)。另一种方法是调用'resize()',或者直接用count来构造vector,然后分配'v [i] = c;',这更接近于模拟数组的使用。 –

+0

@gx_当然,刚才提到这是因为OP的原始问题可能涉及访问数组中的任意元素。 –

2

可变长度数组不是该语言的标准功能。你必须在堆上分配或创建一个向量。

相关问题