我试图制作一个程序来使用单链接列表(堆栈)添加/删除/显示数组元素。但是出现了三个错误。
我不知道编码是否正确(我今年刚从高中毕业),并且使用的是旧版本的C ++。
#include<conio.h>
#include<string.h>
#include<stdio.h>
typedef struct node
{
char *name;
int roll;
struct node *next;
};
class list //Error 1: Declaration Syntax Error
{
node *head;
public:
list()
{
head=NULL;
}
void add( char *, int);
void remove();
void display();
};
void list::add(char *n, int r) //Error 2 and 3: Size of list is unknown or
zero error and Declaration Syntax Error
{
node *p, *q;
p=new node;
strcpy(p->name, n);
p->roll=r;
if(head==NULL)
{
head=p;
head->next=NULL;
return;
}
p->next=head;
head=p;
}
void list::remove()
{
node *p;
if(head==NULL)
{
cout<<"\n\nUnderflow";
return;
}
if(head->next==NULL)
{
p=head;
head=NULL;
cout<<"\n\nElement deleted is:"<<p->name<<","<<p->roll;
delete(p);
return;
}
p=head;
head=p->next;
cout<<"\n\nElement deleted is"<<p->name<<","<<p->roll;
delete(p);
}
void list::display()
{
node *p;
if(head==NULL)
{
cout<<"\n\nNothing to Display";
return;
}
p=head;
while(p->next!=NULL)
{
fflush(stdin);
cout<<p->name<<" "<<p->roll<<"\n";
p=p->next;
}
cout<<p->name<<" "<<p->roll;
}
void main()
{
list X;
char *sname;
int ch, roll;
clrscr();
do
{
cout<<"\n\n1.Add\n\n2.Delete\n\n3.Display\n\n\nEnter your choice:";
switch(getche())
{
case '1':
{
cout<<"\n\n\nEnter your name:";
gets(sname);
getch();
cout<<"\n\nEnter your roll:";
cin>>roll;
getch();
X.add(sname,roll);
}
break;
case '2':
{
cout<<"\n\nThe Display of your entry:";
X.remove();
}
break;
case '3':
{
cout<<"\n\nThe Link List elements are:\n\n";
X.display();
}
break;
default:
cout<<"\n\nWrong choice:";
}
cout<<"\n\n\nDo you want to continue(y/n)? :";
}
while (getche()=='y');
}
如果有人想指出代码中的其他错误,这将非常有帮助。 谢谢。
答案 0 :(得分:1)
这只是一个猜测,因为即使我切换回C ++ 98标准,也无法在C ++编译器中重现该错误。
两件事:
1。)如果源文件的结尾为.c
(而不是.cpp
),则编译器可能会将您的输入视为C文件(并且C无法识别关键字{{1 }}。
2。)您的class
缺少您定义的别名的名称,即它应该类似于
typedef
无论如何,在C ++中-与C相反-编写
typedef struct node
{
char *name;
int roll;
struct node *next;
} node; // <-- name for the alias.
为了同时使用struct node
{
char *name;
int roll;
struct node *next;
};
或仅使用struct node
来引用结构类型。
答案 1 :(得分:0)
一旦完成编译,此代码就会给您一个运行时错误
p=new node;
strcpy(p->name, n);
此代码将字符串复制到p->name
。问题是p->name
没有指向有效的内存。为了使这项工作,您必须为要复制的字符串分配一些内存。这不会自动发生。需要这样的东西
p = new node;
p->name = new char[strlen(n) + 1]; // allocate memory for string
strcpy(p->name, n);
必须同意MSalters的知识,无论谁教你这是关于现代C ++的知识都不多。