c++ - 初始化 const 指针 - C++ 中的初始化列表

标签 c++

我目前正在尝试用 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/

相关文章:

c++ - BST删除并没有真正删除

c++ - opencv 不识别宏

c++ - QOpenGLContext 和 native OpenGL 上下文之间的纹理共享不适用于 Mesa 驱动程序

c++ - 使用 dllimport 代替 dllexport

c++ - 在多线程单写入器多读取器代码中安全使用 int

c++ - C++中具有输出限制的排列

c++ - 执行不在线程之间切换 (c++11)

c++ - 关于删除指针的 Clang 警告

c++ - 分配不完整类型 'T' c++

c++ - 更改模型后 View 未更新