g++:数组界限不是整数常量

2023-11-22

有了代码,

const double rotationStep = 0.001;
const int N = 2*int(M_PI/rotationStep) + 3;

static unsigned int counts[N];

g++给出错误:

数组边界在 »]« 标记之前不是整数常量

我在用g++/gcc版本4.6.1

谁能告诉我为什么g++抱怨表达方式?


截至 2003 年的 ISO C++ 标准,这不是一个积分常量表达式。引用标准第5.19节:

An 积分常量表达式只能涉及文字 (2.13), 枚举器,const整数或的变量或静态数据成员 用常量表达式初始化的枚举类型(8.5), 整数或枚举类型的非类型模板参数,以及sizeof表达式。浮动文字 (2.13.3) 仅在以下情况下才会出现 它们被转换为整型或枚举类型。

你可以改变这个:

const double rotationStep = 0.001;
const int N = 2*int(M_PI/rotationStep) + 3;

to this:

const int inverseRotationStep = 1000;
const int N = 2*int(M_PI)*inverseRotationStep + 3;

(这是假设M_PI在某处定义;标准中没有指定它,但它是一个常见的扩展。)

2011 年 ISO C++ 标准稍微放松了这一点。 5.19p3(引用 N3337 草案)说:

An 积分常量表达式是一个字面常量表达式 整数或无范围枚举类型。

I think 2*int(M_PI/rotationStep) + 3,因此N,符合新规则,但您的编译器可能尚未实现它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

g++:数组界限不是整数常量 的相关文章

随机推荐