Я объяснил в комментариях этого кода мою проблему. Компилятор жалуется, что root
не инициализирован, однако я инициализирую его в скобках конструктора. Если я также использовал initialization list
, то я бы инициализировал его дважды вместо одного? Как правильно это сделать?Инициализация членов класса
tree.h
class Tree
{
public:
Tree();
~Tree();
private:
struct Node
{
Node(int i);
int i;
};
Node root;
};
Tree.cpp
#include "Tree.h"
Tree::Tree() // <---- Complains that root isn't initialized
/* An initialization list here fixes the problem, however
* that wouldn't be convinient because I need to calculate the arguments of
* the Node first... So if I used both an initializer list here
* and then I also initialize the root AGAIN in the brackets bellow,
* wouldn't I be executing more code for no reason ?
*/
{
root = Node(1); // initialize root
}
Tree::~Tree()
{ }
Tree::Node::Node(int i) :
{
i = 1;
}
Я рекомендую не использовать вложенные классы или пока ваши структуры знания не улучшились. Вложенные классы и структуры добавляют уровень сложности, который вам не нужен в это время в процессе обучения. –
@ThomasMatthews Не имеет значения, если «Node» вложен или нет в этом вопросе. Просто протестировал его. – dimitris93