2017-04-03 43 views
0

我声明了以下结构的全球结构:错误数组声明:表达式必须有一个恒定的值

typedef struct { 
    int value; 
    int index; 
}element; 

我有k排序队列的程序,我把在heapSort(我使用一个数组)每个的最小值。我使用struct中的索引值来跟踪我想从堆中弹出的元素。现在,我要测试的程序不同数目的队列,所以我这样做:

for (int i = 10;i <= 50;i += 10) { 
    const int k = i; 
    element a[k]; 
} 

但我得到一个错误:

Expression must have a constant value

有没有什么办法可以“欺骗”了吗?

+1

标准C++不具有可变长度数组(C一样)。改为使用std :: vector。 –

+2

你可以使用'std :: vector a(k)'。 – Jarod42

+1

'std :: vector a(i);'完全抛弃'k'。而且,如果被允许,无论这是为了什么目的,''中的堆操作将非常方便并为您节省一吨*代码。如果这是一个优先级队列,['std :: priority_queue'](http://en.cppreference.com/w/cpp/container/priority_queue)适配器可以为你节省更多的努力。 – WhozCraig

回答

1

你声明一个array,数组的大小不能改变。要解决这个问题,最好使用vector

尝试这种情况:

#include <vector> 
vector <element> a(50); 

为了弹出元件出vector的尝试:

a.erase(a.begin()+index_from_zero); 
+0

修正了它。谢谢! – chbchb55

相关问题