您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 写一个链表程序,老是报错,高手请进!详见下

写一个链表程序,老是报错,高手请进!详见下

来源:网络整理     时间:2016/7/23 19:03:25     关键词:

关于网友提出的“ 写一个链表程序,老是报错,高手请进!详见下”问题疑问,本网通过在网上对“ 写一个链表程序,老是报错,高手请进!详见下”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 写一个链表程序,老是报错,高手请进!详见下
描述:

在windows下用VV6.0写一个c语言链表程序,代码如下:
定义了两个结构体:


typedef struct  
{
int element;//结点的成员
Link *next;//指向结点的后一个成员
}Link;
typedef struct
{
Link *head;//链表的头结点
Link *tail;//链表的末节点
int num=0;//链表中元素的个数
}Line;

写这个链表的添加函数,代码如下:

bool add(Line line,Link* link )
{
if(line.num==0)
{
link->next=NULL;//这里总是说NULL是不可以引用的变量。
line.head=line.tail=link;
line.num =1;
return true;
}
else
{
link->next=line.head;
line.head=link;
line.num++;
return true;
}
return false;
}

添加函数注释的地方总是说NULL不可以引用。我都无语了。请高手解答。我开始改过

if(line.num==0)为if(line.head==NULL),也是一样的错

解决方案1:

这样好像就可以啦。。


#include  //here
enum bool
{
    false = 0,
    true
};
typedef struct _Link
{
    int element;
    struct _Link *next;  //here
}Link;
typedef struct
{
    Link *head;
    Link *tail;
    int num ;   //here
}Line;
bool add(Line line,Link* link )
{
    if(line.num==0)
    {
        link->next=NULL;
        line.head=line.tail=link;
        line.num =1;
        return true;
    }
    else
    {
        link->next=line.head;
        line.head=link;
        line.num++;
        return true;
    }
    return false;
}
解决方案2:

引用 7 楼 itfat 的回复:
引用 5 楼 bxk253387223 的回复:
C/C++ code#include //here
typedefstruct _Link
{int element;struct _Link*next;//here}Link;
typedefstruct
{
    Link*head;
    Link*tail;int num ;//here}Line;bool add(Line line,Link* link )
{if(line.num==0)
    {
        link->next=NULL;
        line.head=line.tail=link;
        line.num=1;returntrue;
    }else
    {
        link->next=line.head;
        line.head=link;
        line.num++;returntrue;
    }returnfalse;
}
额,谢谢!你用的是C++吧,呵呵我用的C,恩,刚才试过上面几位朋友的方法,但是还是不能用NULL。感谢大家!

上面的和C差不多,不过有个疑问,如果是C的话,bool是你自己定义的?
如果自己定义了,那前面加上头文件就可以使用NULL了。 解决方案3:

#include  //here
typedef struct _Link
{
    int element;
    struct _Link *next;  //here
}Link;
typedef struct
{
    Link *head;
    Link *tail;
    int num ;   //here
}Line;
bool add(Line line,Link* link )
{
    if(line.num==0)
    {
        link->next=NULL;
        line.head=line.tail=link;
        line.num =1;
        return true;
    }
    else
    {
        link->next=line.head;
        line.head=link;
        line.num++;
        return true;
    }
    return false;
}
解决方案4:

另外C++中在结构内部int num = 0; 应该是不可以的


typedef struct
{
    Link *head;//链表的头结点
    Link *tail;//链表的末节点
    int num=0;//链表中元素的个数
}Line;
解决方案5:


typedef struct Link //注意这里,要事先声明Link不然Link *next会出错 
{
    int element;//结点的成员
    Link *next;//指向结点的后一个成员
}Link;
解决方案6:

typedef struct
{
    Link *head;//链表的头结点
    Link *tail;//链表的末节点
    int num=0;//链表中元素的个数
}Line;
int num=0; 结构体中不能这么定义。
还有你的add函数Line line,最好用指针类型,你的方式是按值传递,不好。

解决方案7:

bool add(Line line,Link* link )
你的add函数居然不负责分配内存,到时候估计你代码很容易出错

解决方案8:

NULL改成0 吧.
这个在stddef.h中定义的


以上介绍了“ 写一个链表程序,老是报错,高手请进!详见下”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2869808.html

相关图片

相关文章