gpt4 book ai didi

c++ - G++ 4.8.2 坚持简单变量成员是数组

转载 作者:太空狗 更新时间:2023-10-29 21:18:15 26 4
gpt4 key购买 nike

这个问题只发生在 g++ 4.8.2 for ARMv6 (stock pidora);它在带有 clang 3.4.2 和 g++ 4.8.3 的 x86_64 上编译时没有错误或警告。我很难不将其视为编译器错误,但想听听其他意见。

它涉及到一个简单的成员变量,g++ 坚持认为它是一个数组

error: array must be initialized with a brace-enclosed initializer

类的标题如下所示:

namespace SystemStateMonitor {

class ramInput : public input, public inputFile {
public:
typedef enum {
RATIO,
PERCENT,
KiBYTES,
MiBYTES
} style_t;
ramInput (
const std::string &label = "RAM",
style_t style = style_t::PERCENT
);
unsigned int getAvailable ();
double getDV ();
double ratio ();
protected:
style_t style;
unsigned int available;
void setStyle (style_t);
friend input* jsonInputRAM (jsonObject);
};

}

构造函数如下所示:

#define PROC_FILE "/proc/meminfo"

using namespace std;
using namespace SystemStateMonitor;

ramInput::ramInput (
const string &label,
ramInput::style_t s
) :
input (label),
inputFile (PROC_FILE),
style (s),
available (0)
{
setStyle(style);
}

当我用 ARMv6 g++ 编译它时,我得到:

inputs/ramInput.cpp:19:14: error: array must be initialized with a brace-enclosed initializer
available (0)
^

父类(super class)没有任何成员“可用”;没有潜在的奇怪碰撞。有趣的是,如果我随后修改构造函数:

) :
input (label),
inputFile (PROC_FILE),
style (s)
{
available = 0;
setStyle(style);
}

我现在在 style (s) 中遇到同样的错误。如果我然后用 style 做同样的事情(将初始化移到主体中),我得到 inputFile (PROC_FILE) 的错误, 这是更奇怪的是,这是一个 super 构造函数调用。

inputs/ramInput.cpp:17:22: error: array must be initialized with a brace-enclosed initializer
inputFile (PROC_FILE)
^

不幸但并不奇怪,SSCCE 以此开头:

class test {
public:
test () : x(0) { };
unsigned int x;
};

不会重现问题。

这里可能出了什么问题?我可以相信这不是我的错吗?

最佳答案

正如 Mike Seymour 在对该问题的评论中指出的那样,错误的级联性质表明编译器只是指向问题初始化列表的末尾,而不是正确的条目。该数组原来是在父类(super class)构造函数默认初始化程序中:

   std::array<double,2> range = { 0 }

那个特定的 g++ 窒息了,并且:

   std::array<double,2> range = { 0.0, 0.0 }

但是:

   std::array<double,2> range = { }

有效。幸好我不希望那里有任何非零值...

关于c++ - G++ 4.8.2 坚持简单变量成员是数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30508876/

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