我目前正在尝试用 C++ 实现树结构。我从以下代码开始:
class Tree {
Node * const first;
Node * last;
public:
Tree(Node * const root)
{
first = root;
last = first;
};
}
当然它给了我这些错误:
error: uninitialized member ‘Tree::first’ with ‘const’ type ‘Node* const’ [-fpermissive]
error: assignment of read-only member ‘Tree::first’
我调查了这个问题,发现我必须使用initializer list
。我试过了,但不是很顺利。
Tree(Node * const root)
:first()
{
first->id = 0;
first->sibling = first;
first->point = root->point;
last = first;
};
至此,问题以“运行失败”结束,没有错误,没有异常。
所以我什至尝试过:
Tree(Node * const root)
:first()
{
};
但是甚至没有调用 Node 构造函数..
那我做错了什么?
最佳答案
您不是初始化您的const
指针,而是分配给它。因为它是 const
,所以你不能那样做。您必须在构造函数初始化列表中对其进行初始化:
Tree(Node * const root) : first(root)
{
....
}
请记住,一旦到达构造函数的主体,所有数据成员都已初始化,无论是隐式还是显式。
关于c++ - 初始化 const 指针 - C++ 中的初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20031081/