Опитвам се да компилирам много прост дървен възел с 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;
^
Единственото подобно нещо, което можех да намеря, е този въпрос но това не отговаря на въпроса ми за съжаление.
Отговори:
0 за отговор № 1С активирано предупреждение за ефективно C ++, компилаторът предупреждава, че не следвате насоките, за да предпочитате изрично инициализиране на полетата за членове в списъка с инициализатори.
Добавянето на изричен конструктор вероятно ще се отърве от това:
node() : left(), right(), value()
{}