#include <iostream>
#include <string>
using namespace std;
class node{
public:
node(int data);
friend class slist;
private:
int data;
node *next;
};
node::node(int data){
data = data;
next = NULL;
}
class slist{
public:
slist(){
head = NULL;
}
void insert(int item);
void output();
private:
node* head;
};
void slist::insert(int item){
node* newnode = new node(item);
if(head == NULL)
{
head = newnode;
}
else
{
newnode->next = head;
head = newnode;
}
}
void slist::output(){
node* p = head;
while (p->next != NULL){
cout << p->data << " ";
p = p->next;
}
cout << p->data << " ";
}
int main(){
slist FINAL;
FINAL.insert(1);
FINAL.insert(2);
FINAL.insert(3);
FINAL.insert(4);
FINAL.output();
return 0;
}
它编译得很好,但它打印出来(我猜)指针而不是实际数字。谁能告诉我为什么?
非常感谢!
答案 0 :(得分:6)
node
构造函数中存在错误。参数data
与名为data
的memeber变量冲突。这应该解决它:
node::node(int data){
this->data = data;
next = NULL;
}
更好的选择是将参数重命名为其他内容。另请考虑使用initialization list:
node::node(int d) : data(d), next(NULL) { }
答案 1 :(得分:3)
node::node(int data) {
data = data;
next = NULL;
}
data = data
行是您的问题。将参数重命名为与成员不同。这应该为成员变量data
提供一系列垃圾值(而不是指针)。
注意:这是命名常规区分成员变量的原因之一,可以是traling或者引导_
,m_
,也可以是平衡是b / w信息和美学的地方。
答案 2 :(得分:1)
好吧,我认为
中的data
两个实例
data = data;
是当地的;所以node
的数据成员永远不会分配任何内容。打印的是未定义的值,而不是地址。无论如何,这在风格上都很糟糕;这里有很多约定,但是对于类成员来说是好_data
,对于函数参数是data
。进行简单的更改,看看是否无法解决您的问题。