#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;
}
我无法弄清楚为什么这不起作用。有这个问题的其他人似乎试图动态分配数组。非常感谢任何帮助。
答案 0 :(得分:4)
x是const(显然是z),但x [0]不是常量表达式。类定义中的数组声明必须具有常量大小说明符。
考虑一下这个;如果在编译时它包含一个未知大小的数组,那么你期望sizeof运算符如何评估你的类的大小?
答案 1 :(得分:3)
主版本有效,因为您的编译器具有允许可变长度数组的扩展。数组访问不能是C ++ 03中的常量表达式,即使数组和索引都是常量表达式,也就是错误的来源。
答案 2 :(得分:1)
数组的大小必须是常量表达式。我不相信数组中的常量元素是这样的。
main()工作中的版本可能是由于编译器扩展。