g++ 4.8.2坚持简单变量成员是数组
G++ 4.8.2 insists simple variable members are arrays
此问题仅发生在g++ 4.8.2 for ARMv6 (stock pidora);它在x86_64 w/clang 3.4.2和g++ 4.8.3上编译时没有错误或警告。我很难不把它看作是一个编译器的错误,但想得到一些其他的意见。
它涉及到一个简单的成员变量,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)
^
父类没有任何成员"available";没有潜在的奇怪碰撞。有趣的是,如果我修改构造函数:
) :
input (label),
inputFile (PROC_FILE),
style (s)
{
available = 0;
setStyle(style);
}
对于style (s)
,我现在得到相同的错误。如果我对style
做同样的事情(将初始化移动到主体中),我得到inputFile (PROC_FILE)
的错误,更奇怪,因为这是一个超级构造函数调用。
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在对问题的评论中指出的那样,错误的级联性质表明编译器只是指向问题初始化列表的末尾,而不是指向正确的条目。该数组位于超类构造函数默认初始化项中:
std::array<double,2> range = { 0 }
这个特殊的g++阻塞在上面,并且:
std::array<double,2> range = { 0.0, 0.0 }
但:
std::array<double,2> range = { }
。还好我不想要任何非零值
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组