C++ 类 - 我的程序有啥问题?

Posted

技术标签:

【中文标题】C++ 类 - 我的程序有啥问题?【英文标题】:C++ Classes - What is wrong with my program?C++ 类 - 我的程序有什么问题? 【发布时间】:2012-06-05 03:29:48 【问题描述】:

Insert 是一种将项目附加到我的链表末尾的方法。

不知道如何为 Node 为空的情况编写代码,我只想添加。

struct Node
       int data;
       Node *next;

       Node(int data):data(data),next(NULL)

       void insert(int data)
            if (this==NULL)
               this=new Node(data); // compiler is complaining here.
                                    // how would I go about setting the value of this (which is presently NULL) to a new Node?
            
       

【问题讨论】:

如果thisNULL,你是如何使用它的成员的? this怎么会是NULL呢? 以下是什么?节点 *n = NULL; 这是一个指向 Node 的指针。没有 Node 是从那里创建的。那里的NULL 只是表示它没有指向任何东西。 @user1202422:您不能在空指针上调用成员。 this in insertNode const * (即不能更改)...你需要重新审视你的设计,考虑你想 append 一个新的 Nodelist...也许您错过了列表? 所以如果我这样做了:n = new Node; n.插入(5); // 这一步,插入不是在空节点上运行吗? 【参考方案1】:

你不能给 this 指针赋值,这是一个特殊的关键字,应该总是指向一个有效的内存块。通过查看您的使用情况,您是否想说:

void insert(int data)
            if (!next)
               next = new Node(data);

            

【讨论】:

到上面,如果我有: int main() Node *n = new node; n->插入(5); // 在这种情况下,我们希望该方法等效于:n->data = data, n->next = NULL。 也许你的类应该有两个函数,即 setData 和 insert。 n->setData() 设置 n 的数据,但 n->insert() 设置列表中最后一个节点的数据。此外,您必须有一个带有数据的根节点才能实际插入内容。【参考方案2】:

类似这样的:

void insert(int data)

    Node* newNode = new Node(data);

    if (next!=NULL)
        newNode->next = next;
    next = newNode;

您不能直接分配给“this”;您需要考虑的是如何表示一个空列表,很可能是:

Node* head = 0;

所以你添加第一个节点

head = new Node(data);

【讨论】:

以上是关于C++ 类 - 我的程序有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

c++:Status问题(status是c++中的关键字吗?是一种数据类型吗?它有啥作用?)

下面的代码有啥作用? C++ [重复]

C++ 中的 _tmain() 和 main() 有啥区别?

C语言和C++有啥区别?

在 C# 中使用带有字符串的 C++ 类 (Dll)

这个 C++ 程序有啥问题?