我从第三方代码中收到很多我无法修改的警告。 有没有办法禁用此警告或至少禁用某些区域(如VC ++中的#pragma push / pop)?
示例:
list.h:1122: warning: `list<LogOutput*, allocator<LogOutput*> >::node_alloc_' will be initialized after
list.h:1117: warning: `allocator<LogOutput*> list<LogOutput*, allocator<LogOutput*> >::alloc_'
答案 0 :(得分:326)
确保成员按照它们在类
中出现的顺序出现在初始化列表中Class C {
int a;
int b;
C():b(1),a(2){} //warning, should be C():a(2),b(1)
}
或者您可以转为-Wno-reorder
答案 1 :(得分:28)
您可以使用-Wno-reorder
停用它。
答案 2 :(得分:15)
对于那些使用QT有此错误的人,请将其添加到.pro文件
QMAKE_CXXFLAGS_WARN_ON += -Wno-reorder
答案 3 :(得分:7)
使用-Wno-reorder
(男人gcc是你的朋友:))
答案 4 :(得分:4)
如果您看到库标题出现错误并且您正在使用GCC,那么您可以通过使用-isystem
代替-I
来添加标题来停用警告。
clang中存在类似的功能。
如果您使用的是CMake,则可以为include_directories
指定SYSTEM
。
答案 5 :(得分:1)
初始化顺序无关紧要。所有字段都按其类/结构中的定义顺序进行初始化。但是如果初始化列表中的顺序不同,gcc / g ++会生成此警告。仅更改初始化顺序以避免此警告。但是在构造之前,您无法在初始化中定义字段。这将是一个运行时错误。所以你改变了定义的顺序。小心并保持注意!
答案 6 :(得分:0)
Class C {
int a;
int b;
C():b(1),a(2){} //warning, should be C():a(2),b(1)
}
顺序很重要,因为如果a在b之前初始化,并且a取决于b。出现未定义的行为。