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?
【问题讨论】:
如果this
是NULL
,你是如何使用它的成员的? this
怎么会是NULL
呢?
以下是什么?节点 *n = NULL;
这是一个指向 Node
的指针。没有 Node
是从那里创建的。那里的NULL
只是表示它没有指向任何东西。
@user1202422:您不能在空指针上调用成员。 this
in insert
是 Node const *
(即不能更改)...你需要重新审视你的设计,考虑你想 append
一个新的 Node
到 list...也许您错过了列表?
所以如果我这样做了: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++中的关键字吗?是一种数据类型吗?它有啥作用?)