我创建AVL树类,我想我的节点有一个指针AVL类..这样的:C++ - 指针结构中的类?
struct node
{
int id,height;
node *left,*right;
class AVL *neighbor;
};
的事情是我不能在我的课堂上使用的指针(程序时,我压抑),我相信这是因为构造函数没有被调用..所以指针指向什么都没有..我该如何解决这个问题?我是否为指针创建其他构造函数,为指针分配内存?谢谢!
我创建AVL树类,我想我的节点有一个指针AVL类..这样的:C++ - 指针结构中的类?
struct node
{
int id,height;
node *left,*right;
class AVL *neighbor;
};
的事情是我不能在我的课堂上使用的指针(程序时,我压抑),我相信这是因为构造函数没有被调用..所以指针指向什么都没有..我该如何解决这个问题?我是否为指针创建其他构造函数,为指针分配内存?谢谢!
该声明中没有构造函数。而默认的构造函数不会为你设置默认值。指针并不指向任何东西,它是未指定的,这意味着它指向某个东西,但它可以是任何东西,如果你尝试使用它,也可能是任何东西(未定义的行为)。
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.
我会建议使用NULL或nullptr来初始化空指针而不是0。它不应该使用任何功能差异('(void *)nullptr ==(void *)NULL'和'(void *)nullptr ==(void *)0'),而是NULL和nullptr '让它更清楚指针为空。 (请注意'nullptr'仅在C++ 11或更高版本中可用。) –
@JustinTime同意。 Ammended。 – lfgtm
请附上您的代码 – Meccano
了解如何创建[MCVE] –
我只是说了,遗憾的错误:) – Savvas