C++错误:字段必须具有常量大小
C++ error: fields must have a constant size
有人能给我一个如何解决以下问题的提示吗:
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.
我将按照configuration.h
、httprequests.h
的顺序包括.h文件。我希望在configuration.cpp
文件中配置所有必要的配置参数,但我得到了显示的错误。我在这里做错了什么?
configuration.h
extern int const maxNameSize;
配置.cpp
int const configuration::maxNameSize = 30;
httprequests.h
char device[configuration::maxNameSize];
httprequests.cpp
char HTTPREQUESTS::device[configuration::maxNameSize];
extern const int
不是常量表达式。
如果,变量在点p的常量表达式中可用
- 变量为
- constexpr变量,或
- 它是一个常量初始化变量
- 参考类型或
- const限定的积分或枚举类型
- 并且变量的定义可以从P得到
- 以及
- P与变量的定义在同一个翻译单位
(增加强调(
我希望在configuration.cpp文件
你运气不好。maxNameSize
的值必须对其编译时用户可见。
像这个一样声明maxNameSize
// configuration.h
class configuration
{
public:
static const int maxNameSize = 30;
...
};
无需在configuration.cpp.中定义
您的方法不会使maxNamesize
成为编译时常数。
EDIT,我假设configuration
是一个类。如果它是一个名称空间,那么请执行以下操作,而不是
// configuration.h
namespace configuration
{
const int maxNamesize = 30;
...
}
常量是一个定义规则的例外,所以可以在头文件中定义它们。
我做错了什么?
您定义了一个数组变量,其大小不是编译时常数。
解决方案:您可以选择
- 在使用变量的同一转换单元中将其定义为数组的大小,这样它就可以是编译时间常数。假设数组位于标头中,标头可能包含在多个转换单元中,则无法从外部定义大小。它必须是静态的或内联的
- 或者改用动态数组。创建动态数组的最简单方法是使用
std::vector
相关文章:
- 为什么static_assert错误:即使我传递常量"expression must have a constant value"?
- NVCC 错误:string_view.h:constexpr 函数返回是非常量
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 将错误作为从字符串常量到"char*"的已弃用转换 [-Wwrite-strings]
- 错误:constexpr 变量'struct2Var'必须由常量表达式初始化
- 如何在常量计算表达式中获取编译时错误?
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- C++ 中常量属性的初始化构造函数错误
- 为什么我总是收到此错误:从类型为"农场动物"的右值初始化类型的非常量引用无效|
- 为什么在第二类中使用静态常量会在第一类中给出编译器错误?
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++2440错误-编译器认为字符串是常量字符
- 整体模板参数。错误:在常量表达式中使用'this'
- 语法错误"常量错误"
- 常量错误为此或没有可行的重载“=”
- GCC 模板推导消除了常量错误
- 与 map 一起使用时复制构造函数常量错误
- C++如何在cpp之间与extern共享常量-错误:指定了存储类
- 字符串常量C++错误之前应为标识符
- "Discards qualifiers" C++ 中的虚函数和/或常量错误