首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++错误:字段必须具有常量大小

C++错误:字段必须具有常量大小
EN

Stack Overflow用户
提问于 2020-05-04 09:42:19
回答 3查看 1.2K关注 0票数 2

有谁能告诉我如何解决以下问题吗?

代码语言:javascript
复制
clang++-7 -pthread -std=c++17 -o main createLibrary/configuration.cpp createLibrary/growbox.cpp createLibrary/helper.cpp createLibrary/httprequests.cpp main.cpp
In file included from createLibrary/configuration.cpp:2:
In file included from createLibrary/configuration.h:1:
In file included from createLibrary/growbox.h:12:
createLibrary/httprequests.h:13:10: error: fields must have a constant size:
      'variable length array in structure' extension will never be supported
    char device[configuration::maxNameSize];
         ^
1 error generated.

我将.h文件按order configuration.hhttprequests.h包括在内。我希望在configuration.cpp文件中配置所有必要的配置参数,但是我得到了显示的错误。我在这里做错什么了?

configuration.h

代码语言:javascript
复制
extern int const maxNameSize;

configuration.cpp

代码语言:javascript
复制
int const configuration::maxNameSize = 30;

httprequests.h

代码语言:javascript
复制
char device[configuration::maxNameSize];

httprequests.cpp

代码语言:javascript
复制
char HTTPREQUESTS::device[configuration::maxNameSize];
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-04 09:48:21

像这样声明maxNameSize

代码语言:javascript
复制
// configuration.h
class configuration
{
public:
    static const int maxNameSize = 30;
    ...
};

不需要在configuration.cpp中定义它。

您的方法并不使maxNamesize成为编译时间常数。

编辑,我假设configuration是一个类。如果它是一个名称空间,那么执行下面的操作

代码语言:javascript
复制
// configuration.h
namespace configuration
{
    const int maxNamesize = 30;
    ...
}

常量是一个定义规则的例外,所以可以在头文件中定义它们。

票数 2
EN

Stack Overflow用户

发布于 2020-05-04 09:50:13

extern const int不是常量表达式

变量在点P处的常量表达式中可用,条件是

  • 变量是
    • 常数变量,或
    • 它是一个常量初始化变量。
    • 参考类型或
    • 有限积分或计数型

  • 该变量的定义可以从P中得到。
    • P与变量的定义位于同一个翻译单元中。

(强调后加)

我希望在configuration.cpp文件中配置所有必要的配置参数。

你运气不好。maxNameSize的值必须对其编译时用户可见。

票数 3
EN

Stack Overflow用户

发布于 2020-05-04 09:54:14

我在这里做错什么了?

您已经定义了一个大小不是编译时间常数的数组变量。

解决方案:你可以

  • 在相同的转换单元中定义变量,将其用作数组的大小,以便它可以是编译时间常数。假设数组位于一个标头中,并且可能包含在多个转换单元中,则不能从外部定义数组的大小。它要么是静态的,要么是内联的。
  • 或者使用动态数组代替。创建动态数组的最简单方法是使用std::vector
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61589249

复制
相关文章

相似问题

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