【问题标题】:Class Self-Reference Issues类自引用问题
【发布时间】:2012-03-05 18:05:48
【问题描述】:

我的所有代码都可以在here找到。

我正在尝试为一个项目创建一个复杂的树,但这只是项目的开始(数据结构的构建)。另外,我认为知道数据结构可以是您想要的任何东西,并且我真的想这样做会有所帮助。如果您认为另一个更好,那太好了,但如果没有必要,我不想更改我的数据结构,因为我想遵循这个想法。

也就是说,我正在创建一棵树。

树的每个节点都包含一个内容字符串,如果它是非终端(如果它有子节点或叶子),则为布尔值。

此外,每个节点都包含一个指向向量的指针(我们称该向量为 v)。

V 包含其他向量。我们称其中一个向量为 X。

X 包含一个指向节点的指针。

代码工作正常,除非 X 包含指向包含 V 的节点的指针(如果有意义的话)。当 X 包含指向包含 V 的节点的指针时,我会得到一个无限循环,该循环以段错误终止。

我已经讨论了一个小时,并且很确定问题出在我的解构器中,如下所示:

Node :: ~Node () {
    for (int i = 0; i < (*children).size(); i++) {
        for (int j = 0; j < (*children)[i].size(); j++) {
            if ((*children)[i][j] != selfP) {
                delete (*children)[i][j];
            }
        }
    }
}

我想做的是这样的:

for (int i = 0; i < (*children).size(); i++) {
    for (int j = 0; j < (*children)[i].size(); j++) {
        if ((*children)[i][j] != CURRENT_NODE_ADDRESS) {
            delete (*children)[i][j];
        }
    }
}

但我不太清楚如何引用我当前定义的类的地址。有什么想法吗?

【问题讨论】:

  • 你试过this(link) 指针吗?
  • this 不会是孩子的地址吗?还是属于节点?
  • children 在 Node.cpp 中通过 addLeaves 填充(请参阅问题顶部的 pastebin)。
  • @nicko 如果你把它作为答案,我可以解决这个问题,谢谢。
  • 如果你有循环,那么它不是一棵树。它是一个图表。但是代码价值一百万个英文单词。

标签: c++ class self-reference


【解决方案1】:

你试过this指针吗?

【讨论】:

    【解决方案2】:

    也许您可以轻松地将您的对象与“this”进行比较:

    if (children[i][j] == this)
    {
    ...
    }
    

    children[i][j] 是一个指向你正在编写的类的实例的指针。

    【讨论】:

    • 感谢 Nasser,但 nicko 先到了!这是正确的答案,它就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    相关资源
    最近更新 更多