使用const数组的元素定义类中数组的大小时,'数组绑定不是整数常量'

时间:2011-01-13 19:14:59

标签: c++ arrays class const

#ifndef QWERT_H
#define QWERT_H

const int x [] = {1, 2,};
const int z = 3;
#endif


#include <iostream>
#include "qwert.h"
class Class   
{  
    int y [x[0]];  //error:array bound is not an integer constant
    int g [z];     //no problem  
};


int main ()  
{  

    int y [x[0]];      //no problem
    Class a_class;

}

我无法弄清楚为什么这不起作用。有这个问题的其他人似乎试图动态分配数组。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

x是const(显然是z),但x [0]不是常量表达式。类定义中的数组声明必须具有常量大小说明符。

考虑一下这个;如果在编译时它包含一个未知大小的数组,那么你期望sizeof运算符如何评估你的类的大小?

答案 1 :(得分:3)

主版本有效,因为您的编译器具有允许可变长度数组的扩展。数组访问不能是C ++ 03中的常量表达式,即使数组和索引都是常量表达式,也就是错误的来源。

答案 2 :(得分:1)

数组的大小必须是常量表达式。我不相信数组中的常量元素是这样的。

main()工作中的版本可能是由于编译器扩展。