2017-05-03 27 views
-4

我创建AVL树类,我想我的节点有一个指针AVL类..这样的:C++ - 指针结构中的类?

struct node 
{ 
    int id,height; 
    node *left,*right; 
    class AVL *neighbor; 
}; 

的事情是我不能在我的课堂上使用的指针(程序时,我压抑),我相信这是因为构造函数没有被调用..所以指针指向什么都没有..我该如何解决这个问题?我是否为指针创建其他构造函数,为指针分配内存?谢谢!

+0

请附上您的代码 – Meccano

+0

了解如何创建[MCVE] –

+0

我只是说了,遗憾的错误:) – Savvas

回答

2

该声明中没有构造函数。而默认的构造函数不会为你设置默认值。指针并不指向任何东西,它是未指定的,这意味着它指向某个东西,但它可以是任何东西,如果你尝试使用它,也可能是任何东西(未定义的行为)。

class AVL; 

struct node 
{ 
    // default constructor 
    node() 
     : left(NULL), right(NULL) 
    { 
    } 

    int id,height; 
    node *left,*right; 
    AVL *neighbor; 
}; 

我也冒着转发宣告AVL的自由。在上面的代码中有一个默认的构造函数,但是它将left和right设置为null(NULL == 0),所以你不应该使用它们来设置它们。

node n1; 
node n2; 
*n1.left = n2; // boom, since n1.left is being accessed without being set 
n1.left = &n2; // point n1.left to n2 
*n1.left = n1; // n1.left is not null so is valid. 
+1

我会建议使用NULL或nullptr来初始化空指针而不是0。它不应该使用任何功能差异('(void *)nullptr ==(void *)NULL'和'(void *)nullptr ==(void *)0'),而是NULL和nullptr '让它更清楚指针为空。 (请注意'nullptr'仅在C++ 11或更高版本中可用。) –

+0

@JustinTime同意。 Ammended。 – lfgtm