Bra_Hancock 2017-05-02 08:40 采纳率: 0%
浏览 1965
已采纳

C++ 成员变量作同一个类的成员函数参数 逻辑有什么问题

下面是创建链表的部分代码。
为了在析构函数中delete所有new出来的节点,我在链表的成员中加了个变量来保存链表的头(因为析构是无法带参数的啊)。
然后在DeleteAllNodes()的参数报错了,“a nonstatic member reference must be relative to a specific object”。
我觉得按照运行顺序,在调用DeleteAllNodes()之前,headNode已经指向了一个正确的值,不知道哪有问题。

class Node
{
public:
    int data;
    Node *next;
    Node();
    //Node(int values);
    //~Node();
};

Node::Node()
{
    data = 0;
    next = NULL;
}

class MyList
{
public:
    int ListSize;
    Node *headNode;
    MyList();
    void DeleteAllNodes(Node *headnode);
    ~MyList();
};

MyList::MyList()
{
    ListSize = 0;
    headNode = NULL;
}

void MyList::DeleteAllNodes(Node *headNode2 = MyList::headNode)
{
    if (headNode2 == NULL)
    {
        return;
    }
    Node *nextNode;
    while (true)
    {
        nextNode = headNode2->next;
        delete headNode2;
        headNode2 = nextNode;
        if (headNode2 == NULL)
        {
            break;
        }
    }
}

MyList::~MyList()
{
    DeleteAllNodes();
}

(没有C币了见谅)

  • 写回答

2条回答 默认 最新

  • 关注

    DeleteAllNodes(Node *headNode2 = MyList::headNode)
    为什么要这么写参数?MyList::headNode相当于获取headNode在MyList类中的偏移量,很多编程器不支持你这样的错误逻辑写法。

     void MyList::DeleteAllNodes()
    {
        Node *headNode2 = this->headNode;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记