当前位置: 代码迷 >> C语言 >> 大大的[求助]结构体的重定义!
  详细解决方案

大大的[求助]结构体的重定义!

热度:459   发布时间:2007-10-27 23:45:07.0
大大的[求助]结构体的重定义!
typedef int elemtype;
typedef struct node
{
elemtype data;
struct node *next;
}*link;
为什么是重定义啊?
用了一种方法是:
#ifndef MYDEFINEFLIE_H
#define MYDEFINEFILE_H
typedef int elemtype;
typedef struct node
{
elemtype data;
struct node *next;
}*link
#enddef
来实现,不过我还是不明白书上的这种定义为什么是错误的!
还有什么好的方法,或者大家给我说说为什么这么用是错误的!
谢谢了
搜索更多相关的解决方案: 定义  结构体  node  elemtype  struct  

----------------解决方案--------------------------------------------------------

还有大家看看这个有错误怎么改;
发现在红色的部分L->length的初始化是一个随机的数,在vc下不能运行,在gcc下是可以,但是结果
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef char ElemType;
typedef struct
{ElemType elem[MaxSize];
int length;
}SqList;

void main()
{SqList *L;
ElemType e;
void InitList(SqList *L);
int ListtEmpty(SqList *L);
int ListLength(SqList *L);
void DispList(SqList *L);
int GetElem(SqList *L,int i,ElemType e);
int ListInsert(SqList *L,int i,ElemType e);
printf("Init the List\n");
InitList(L);
printf("input a,b,c,d,e\n");
ListInsert(L,1,'a');
ListInsert(L,2,'b');
ListInsert(L,3,'c');
ListInsert(L,4,'d');
ListInsert(L,5,'e');
printf("output L:\n");
DispList(L);
printf("the L length=%d\n",ListLength(L)) ;

}
void InitList(SqList *L)
{L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
int ListEmpty(SqList *L)
{return(L->length==0);
}
int ListLength(SqList *L)
{return (L->length);
}
void DispList(SqList *L)
{int i;
if (ListEmpty(L)) return;
for(i=0;i<L->length;i++)
printf("%c",L->elem[i]);
printf("\n");
}

int ListInsert(SqList *L,int i,ElemType e)
{int j;
if(i<1||i>L->length)
return 0;
i--;
for(j=L->length;j>i;j--)
L->elem[j]=L->elem[j-1];
L->elem[i]=e;
L->length++;
return 1;
}



----------------解决方案--------------------------------------------------------
[URL=http://bbs.bc-cn.net/viewthread.php?tid=181108]http://bbs.bc-cn.net/viewthread.php?tid=181108[/URL]

看看这个帖子里第一个例子错的原因
也就是你的InitList函数错的原因
----------------解决方案--------------------------------------------------------
重定义是因为在你没加上下面这段时引用了头文件"mydefinefile.h"至少两次吧
#ifndef MYDEFINEFLIE_H
#define MYDEFINEFILE_H
// ...
#endif

----------------解决方案--------------------------------------------------------
我的内存能分配啊,L->length却不能分配,
我跟踪过的
----------------解决方案--------------------------------------------------------
你可以看看我用它的来源是什么!

http://bbs.bc-cn.net/viewthread.php?tid=176545&star=at#
----------------解决方案--------------------------------------------------------
还有不是你的回答的原因!
----------------解决方案--------------------------------------------------------
以下是引用yangzhifu在2007-10-28 0:20:18的发言:
我的内存能分配啊,L->length却不能分配,
我跟踪过的

你没有仔细看我给你的那个链接了吧?
我认为回帖应该已经说的比较清楚了

void InitList(SqList *L)里的这个L只是你在main函数里申明的L的副本。。。。


----------------解决方案--------------------------------------------------------
我将很郑重的说:
谢谢!
----------------解决方案--------------------------------------------------------
看看第一个呢?
----------------解决方案--------------------------------------------------------
  相关解决方案