我尝试使用std::shared_ptr
编译非常简单的树节点。在我的编译器选项中,我使用-Weffc++
和-Werror
,但它会抛出2个我不理解的错误,因此我无法想象解决方案。
最小的例子( t.cpp ):
#include <memory>
struct node {
std::shared_ptr<node> left;
std::shared_ptr<node> right;
std::shared_ptr<int> value;
};
int main() {
node n;
return 0;
}
编译器的输出是:
$ LANG=en_US g++ -std=c++14 -Weffc++ t.cpp
t.cpp: In constructor 'constexpr node::node()':
t.cpp:3:8: warning: 'node::left' should be initialized in the member initialization list [-Weffc++]
struct node {
^
t.cpp:3:8: warning: 'node::right' should be initialized in the member initialization list [-Weffc++]
t.cpp:3:8: warning: 'node::value' should be initialized in the member initialization list [-Weffc++]
t.cpp: In function 'int main()':
t.cpp:10:10: note: synthesized method 'constexpr node::node()' first required here
node n;
^
我能找到的唯一类似的事情是this question,但不幸的是,它没有回答我的问题。
答案 0 :(得分:0)
启用Effective C ++警告后,编译器会警告您没有遵循指南,而是希望在初始化列表中显式初始化成员字段。
添加显式构造函数可能会解决这个问题:
node() : left(), right(), value()
{}