このコードのコメントで私の問題を説明しました。コンパイラはroot
が初期化されていないと言っていますが、コンストラクタの角かっこで初期化しています。私もinitialization list
を使用していた場合は、を2回の代わりに初期化しますか?どのようにこれを正しく設計するのですか?クラスのメンバーの初期化
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