Eu tento compilar um nó de árvore muito simples com std::shared_ptr
. Nas minhas opções de compilador eu uso -Weffc++
e -Werror
mas lança 2 erros que eu não entendo, portanto, não consigo imaginar uma solução.
O exemplo mínimo (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;
}
A saída do compilador é:
$ 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;
^
A única coisa parecida que eu pude encontrar é essa questão mas não responde a minha pergunta infelizmente.
Respostas:
0 para resposta № 1Com o aviso C ++ efetivo ativado, o compilador avisa que você não seguiu a diretriz para preferir a inicialização explícita dos campos de membros na lista de inicializadores.
Adicionar um construtor explícito provavelmente se livrará disso:
node() : left(), right(), value()
{}