C++ 某个节点类逻辑错误?
我试图实现一个easy Node类,但是当我试图通过根节点访问子节点时,它是空的,但是如果我直接访问子节点,它就被正确地填充了。我是不是有什么逻辑上的错误,或者有人能告诉我哪里出了问题C++ 某个节点类逻辑错误?,c++,qt,pointers,C++,Qt,Pointers,我试图实现一个easy Node类,但是当我试图通过根节点访问子节点时,它是空的,但是如果我直接访问子节点,它就被正确地填充了。我是不是有什么逻辑上的错误,或者有人能告诉我哪里出了问题 Node::Node(QString name, Node *parent) { this->name = name; this->parent = parent; parent->children.append(this); } \\ 我希望有人能帮助我 关于我不认
Node::Node(QString name, Node *parent)
{
this->name = name;
this->parent = parent;
parent->children.append(this);
}
\\
我希望有人能帮助我
关于我不认为
返回儿童[行]函数getChild
中的code>是正确的。您确定不想要*子项。begin()
区别在于,children[row]
假设您有一个QList的数组,并且您想要访问QList的第行,而*children.begin()
实际上引用了QList的第一个元素。当您这样做时,您给父节点
一个临时节点的地址
Node childNode0 = Node("childNode0", &rootNode);
// ^ rootNode gets this temporary Node as its first child
不要通过从临时文件复制来构造节点
s,请执行以下操作:
Node childNode0("childNode0", &rootNode);
为类节点
定义复制构造函数和赋值运算符。让他们输出调试消息。会发生什么?现在把它们保密。发生了什么?QList
使[]
从列表中获取提问者想要的元素。正如tmperace所说。我还是试过。完全一样。还是两个不同的地址Kay,我明白了。。。我对QList类的使用不多,我认为它类似于std::list类,它没有实现[]操作符。您好,非常感谢-我从几个小时以来就反复尝试,没有找到解决方案。这是因为复制构造函数没有按照上面的注释实现吗?另一个提示是输出行“NodeName:childNode0”| NodeChilds:0
-在构造所有对象后,您希望子对象的数量是2
,而不是0
。有关更多详细信息,请参阅。我有点惊讶编译器在这种情况下没有构建到位。啊,谢谢链接。我想是时候刷新我的基础知识了:)这是因为编译器默认为您实现了一个复制构造函数,所以您可以复制该构造函数。为了避免这种情况,您可以声明副本构造函数private
,而不定义它。或者,如果您使用的是C++11编译器,则可以将复制构造函数声明为已删除。
"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
Node childNode0 = Node("childNode0", &rootNode);
// ^ rootNode gets this temporary Node as its first child
Node childNode0("childNode0", &rootNode);