二进制树与类

时间:2016-06-17 18:19:35

标签: c++ class tree

我有这段代码:

class Node{
public:
    Square square;
    Node *NW;
    Node *NE;
    Node *SW;
    Node *SE;

};

int main()
{
    Square s(2,3,1);
    Node *root;

    root->square=s;
    cout<<root->square.length();

}

Square是我创建的一个类。但是当我运行这段代码时,我得到了分段错误11.基本上我想使用Square类的对象作为树的数据类型,而length是square对象的函数。为什么这是错的?

2 个答案:

答案 0 :(得分:3)

您应该在堆栈上声明Node

int main()
{
    Square s(2,3,1);
    Node root;

    root.square = s;
    cout << root.square.length();
}

目前的问题是您使用的是未初始化的未分配指针。如果你想坚持一个指针(在这种情况下没有理由),你需要new它(然后记住delete它。)

int main()
{
    Square s(2,3,1);
    Node *root = new Node;

    root->square = s;
    cout << root->square.length();

    delete root;
}

在现代C ++中,如果你确实需要一个指针(例如,如果该类是多态的等),你应该更喜欢智能指针而不是原始指针。

int main()
{
    Square s(2,3,1);
    auto root = std::make_unique<Node>();

    root->square = s;
    cout << root->square.length();
}

答案 1 :(得分:0)

root = new node;
root -> squares = s;
delete root;
root = NULL;

您需要为指针分配内存。您正尝试取消引用尚未分配的指针。这就是为什么你是segfaulting。