gpt4 book ai didi

c++ - 具有恒定大小数组的警告 "ISO C++ forbids variable-size array"

转载 作者:行者123 更新时间:2023-11-30 04:09:35 30 4
gpt4 key购买 nike

我有一个 C++ 程序,其中常量存储在一个类中。在代码的其他地方,我使用这些常量之一作为数组大小。

这是一个示例:

常量.h

#ifndef CONSTANTS_H
#define CONSTANTS_H

class Constants
{
public:
static const unsigned int C_BufferSize;
};

#endif

常量.cpp

#include "Constants.h"

const unsigned int Constants::C_BufferSize(128);

main.cpp

#include "Constants.h"

int main()
{
char buffer[Constants::C_BufferSize];
return 0;
}

当我使用 -std=c++11 -pedantic 编译此代码时,我收到以下警告:

main.cpp:5:37: warning: ISO C++ forbids variable length array ‘buffer’ [-Wvla]

我不太明白这个错误,因为大小是一个常量,我的猜测是在编译时大小是未知的。

可以使用堆分配表(使用 new 分配)绕过该错误,但我禁止使用动态内存分配。因此,我正在寻找另一种解决方案。

最佳答案

定义 是必需的,并在链接时进行搜索。所以是的,在编译阶段大小是未知的。

你正在写这个:

class Constants
{
public:
static const unsigned int C_BufferSize = 128; //initialize here
};

然后只在.cpp 文件中提供定义:

const unsigned int Constants::C_BufferSize; //no initialization here

但是让 Constants 成为命名空间而不是类更有意义:

namespace Constants  //NOTE : a namespace now
{
static const unsigned int BufferSize = 128;
};

对我来说似乎更自然。

关于c++ - 具有恒定大小数组的警告 "ISO C++ forbids variable-size array",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21137324/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com