簡単なノードクラスを実装しようとしましたが、ルートノードを介して子ノードにアクセスしようとすると空になりますが、子ノードに直接アクセスすると、正しく入力されます。どこかに論理的な間違いがありますか、それとも誰かが私に何が悪いのかというヒントを与えることができますか?
Node::Node(QString name, Node *parent)
{
this->name = name;
this->parent = parent;
parent->children.append(this);
}
\\
class Node
{
public:
Node(QString name) { this->name = name; }
Node(QString name, Node *parent);
~Node(void);
void addChild(Node *child);
QString getName() { return name; }
Node* getChild(int row) { return children[row]; }
Node* getParent() { return parent; }
int childCount() { return children.size(); }
int getRow() {return this->parent->children.indexOf(this);}
QString log(int tabLevel = -1);
private:
QString name;
QList<Node*> children;
Node *parent;
};
間違いを見つけようとしましたが、結果として、子ノードには2つの異なるアドレスがあるように見えるため、2つの異なるオブジェクトがありますが、理由はわかりません:/
Node rootNode = Node("rootNode");
Node childNode0 = Node("childNode0", &rootNode);
Node childNode1 = Node("childNode1", &rootNode);
Node childNode2 = Node("childNode2", &rootNode);
Node childNode3 = Node("childNode3", &childNode0);
Node childNode4 = Node("childNode4", &childNode0);
qDebug() << "RootNode: " + rootNode.getName() << " | RootChilds: " << rootNode.childCount();
qDebug() << "NodeName: " +rootNode.getChild(0)->getName() << " | NodeChilds: " << rootNode.getChild(0)->childCount();
for(int i = 0; i < childNode0.childCount(); i++)
{
qDebug() << "NodeName: " << childNode0.getName() << " | NodeChilds: " << childNode0.childCount() << "Child Nr: " << i << " Name -> " << childNode0.getChild(i)->getName();
}
qDebug() << "Adress via root: " << rootNode.getChild(0) << "\nAdress via node: " << &childNode0 ;
}
その出力:
"RootNode: rootNode" | RootChilds: 3
"NodeName: childNode0" | NodeChilds: 0
NodeName: "childNode0" | NodeChilds: 2 Child Nr: 0 Name -> "childNode3"
NodeName: "childNode0" | NodeChilds: 2 Child Nr: 1 Name -> "childNode4"
Adress via root: 0x41fc84
Adress via node: 0x41fcc0
誰かが私を助けてくれることを願っています
よろしく