Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 某个节点类逻辑错误?_C++_Qt_Pointers - Fatal编程技术网

C++ 某个节点类逻辑错误?

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); } \\ 我希望有人能帮助我 关于我不认

我试图实现一个easy Node类,但是当我试图通过根节点访问子节点时,它是空的,但是如果我直接访问子节点,它就被正确地填充了。我是不是有什么逻辑上的错误,或者有人能告诉我哪里出了问题

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);