首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >奇怪的错误C2131:表达式在VC 2015中没有计算为常数

奇怪的错误C2131:表达式在VC 2015中没有计算为常数
EN

Stack Overflow用户
提问于 2015-11-10 07:54:41
回答 1查看 19.5K关注 0票数 2
代码语言:javascript
运行
复制
// foo.hpp file 
class foo 
    { 
    public: 
      static const int nmConst; 
      int arr[nmConst]; // line 7 
    };  
// foo.cpp file 
    const int foo::nmConst= 5; 

编译器VC 2015返回错误:

1>foo.h(7):错误C2131:表达式没有计算为常量 1> 1>foo.h(7):失败是由非常量参数或 引用非常量符号1> 1>foo.h(7):注意:参见“nmConst”的用法

为什么?nmConst是静态常量,其值在*.cpp文件中定义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-10 08:07:19

可以使用static const int成员作为数组大小,但您必须在.hpp文件中的类中定义这个成员,如下所示:

代码语言:javascript
运行
复制
class foo
{
public:

    static const int nmConst = 10;
    int arr[nmConst];

};

这会管用的。

P.S.关于它背后的逻辑,我相信编译器想知道数组成员在遇到类声明时的大小。如果您在类中没有定义static const int成员,编译器将理解您试图定义变量长度数组并报告一个错误(它将迫不及待地查看是否在某个地方定义了nmconst )。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33625180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档