在头文件定义结构体时,出现错误说,结构体重新定义不同的基本类型

cj_c007 2012-08-31 01:31:50

typedef struct
{
DataType list[MaxSize];
int size;
}SeqList;

void ListInitiate(SeqList *L) //初始化顺序表L
{
L->size=0; //定义初始数据元素个数

}

int ListLength(SeqList L)//返回顺序表L的当前数据元素个数
{
return L.size;

}

int ListInsert(SeqList *L,int i,DataType x)//往顺序表中第i个位置插入数值x
//插入成功返回1,失败返回0
{
int j;
if(L->size>=MaxSize)
{
printf("顺序表已满无法插入!\n");
return 0;
}
else if(i<0||i>L->size)
{
printf("参数i不合法!\n");
return 0;
}
else
{
for(j=L->size;j>i;j--)
L->list[j]=L->list[j-1];//数据依次向后移,为插入做准备
L->list[i]=x;//插入x
L->size++;
return 1;
}
}

int ListDelete(SeqList *L,int i)//删除位置i的数据元素,成功返回1,失败0
{
int j;
if(L->size<=0)
{
printf("顺序表为空无元素可删!\n");
return 0;
}
else if(i<0||i>L->size-1)
{
printf("参数i不合法!\n");
return 0;
}
else
{
for(j=i+1;j<=L->size-1;j++)
L->list[j-1]=L->list[j];
L->size--;
return 1;
}
}

int ListGet(SeqList L,int i,DataType *x)//取第i个元素存于x中,成功返回1,失败0
{
if(i<0||i>L.size-1)
{
printf("参数i不合法!\n");
return 0;
}
else
{
*x=L.list[i];
return 1;
}
}
...全文
599 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
庄鱼 2012-08-31
  • 打赏
  • 举报
回复

#ifndef InitEnv_H
#define InitEnv_H
typedef char DataType;
#define MaxSize 50
#define MaxVertices 50
#define MaxEdges 500
#define MaxWeight 10000
#define MaxQueueSize 50
#endif


#ifndef SeqList_H
#define SeqList_H
#include "InitEnv.h"
typedef struct{
DataType list[MaxSize];
int size;
}SeqList;

extern void ListInitiate(SeqList *L); //初始化顺序表L
extern int ListLength(SeqList L);//返回顺序表L的当前数据元素个数
extern int ListInsert(SeqList *L,int i,DataType x);//往顺序表中第i个位置插入数值x
//插入成功返回1,失败返回0
extern int ListDelete(SeqList *L,int i);//删除位置i的数据元素,成功返回1,失败0
extern int ListGet(SeqList L,int i,DataType *x);//取第i个元素存于x中,成功返回1,失败0
#endif

//SeqList.c
#include "SeqList.h"

void ListInitiate(SeqList *L) //初始化顺序表L
{
L->size=0; //定义初始数据元素个数
}

int ListLength(SeqList L)//返回顺序表L的当前数据元素个数
{
return L.size;
}

int ListInsert(SeqList *L,int i,DataType x)//往顺序表中第i个位置插入数值x
//插入成功返回1,失败返回0
{
int j;
if(L->size>=MaxSize){
printf("顺序表已满无法插入!\n");
return 0;}
else if(i<0||i>L->size){
printf("参数i不合法!\n");
return 0;}
else{
for(j=L->size;j>i;j--)
L->list[j]=L->list[j-1];//数据依次向后移,为插入做准备
L->list[i]=x;//插入x
L->size++;
return 1;}
}

int ListDelete(SeqList *L,int i)//删除位置i的数据元素,成功返回1,失败0
{
int j;
if(L->size<=0){
printf("顺序表为空无元素可删!\n");
return 0;}
else if(i<0||i>L->size-1){
printf("参数i不合法!\n");
return 0;}
else{
for(j=i+1;j<=L->size-1;j++)
L->list[j-1]=L->list[j];
L->size--;
return 1;}
}

int ListGet(SeqList L,int i,DataType *x)//取第i个元素存于x中,成功返回1,失败0
{
if(i<0||i>L.size-1){
printf("参数i不合法!\n");
return 0;}
else{
*x=L.list[i];
return 1;}
}


#ifndef AdjMGraph_H
#define AdjMGraph_H
#include "InitEnv.h"
#include "SeqList.h"
typedef struct {
SeqList Vertices;//存放顶点的顺序表
int edge[MaxVertices][MaxVertices];//存放边的邻接矩阵
int numOfEdges;//边的条数
}AdjMGraph;

extern void Initiate(AdjMGraph *G,int n);//初始化
extern void InserVertex(AdjMGraph *G,DataType vertex);//在图G中插入顶点vertex
extern void InsertEdge(AdjMGraph *G,int v1,int v2,int weight);//在图G中插入边<v1,v2>,权为weight
extern void DeleteEdge(AdjMGraph *G,int v1,int v2);//在图G中删除边<v1,v2>
extern int GetFirstVex(AdjMGraph G,int v);//在图G中寻找序号为v的顶点的第一个邻接顶点
extern int GetNextVex(AdjMGraph G,int v1,int v2);//在图G中寻找v1顶点的邻接顶点v2的下一个邻接顶点
#endif

//AdjMGraph.c
#include "AdjMGraph.h"
void Initiate(AdjMGraph *G,int n)//初始化
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++){
if(i==j)
G->edge[i][j]=0;
else
G->edge[i][j]=MaxWeight;//MaxWeight表示无穷大
}
G->numOfEdges=0;//边的条数为0
ListInitiate(&G->Vertices);//顺序表初始化
}

void InserVertex(AdjMGraph *G,DataType vertex)//在图G中插入顶点vertex
{
ListInsert(&G->Vertices,G->Vertices.size,vertex);//顺序表尾插入
}

void InsertEdge(AdjMGraph *G,int v1,int v2,int weight)//在图G中插入边<v1,v2>,权为weight
{
if(v1<0||v1>=G->Vertices.size||v2<0||v2>=G->Vertices.size){
printf("参数v1或参数v2越界出错!\n");
return;}
G->edge[v1][v2]=weight;
G->numOfEdges++;
}

void DeleteEdge(AdjMGraph *G,int v1,int v2)//在图G中删除边<v1,v2>
{
if(v1<0||v1>=G->Vertices.size||v2<0||v2>=G->Vertices.size||v1==v2){
printf("参数v1或参数v2越界出错!\n");
return;}
if(G->edge[v1][v2]==MaxWeight||v1==v2){
printf("该边不存在!\n");
return;}
G->edge[v1][v2]=MaxWeight;
G->numOfEdges--;
}

int GetFirstVex(AdjMGraph G,int v)//在图G中寻找序号为v的顶点的第一个邻接顶点
{
int col;
if(v<0||v>G.Vertices.size){
printf("参数v越界出错\n");
return -1;}
for(col=0;col<G.Vertices.size;col++)
if(G.edge[v][col]>0&&G.edge[v][col]<MaxWeight)
return col;
return -1;
}

int GetNextVex(AdjMGraph G,int v1,int v2)//在图G中寻找v1顶点的邻接顶点v2的下一个邻接顶点
{
int col;
if(v1<0||v1>G.Vertices.size||v2<0||v2>G.Vertices.size){
printf("参数v1或参数v2越界出错!\n");
return -1;}
for(col=v2+1;col<G.Vertices.size;col++)
if(G.edge[v1][col]>0&&G.edge[v1][col]<MaxWeight)
return col;
return -1;
}

#include<stdio.h>
#include<malloc.h>
#include "SeqList.h"
#include "AdjMGraph.h"
//#include "AdjMGraphCreate.h"
//#include "AdjMGraphTraverse.h"
void Visit(DataType item)
{
printf("%c ",item);
}
void main(void)
{
AdjMGraph g1;
DataType a[]={'A','B','C'.'D','E'};
RowColWeight rcw[]={{0,1,10},{0,4,20},{1,3,30},{2,1,40},{3,2,50}};
int n=5,e=5;
int i,j;
CreatGraph(&g1,a,n,rcw,e);
printf("顶点的集合为:");
for(i=0;i<g1.Vertices.size;i++)
printf("%c ",g1.Vertices.list[i]);
printf("\n");
printf("权值的集合为:\n");
for(i=0;i<g1.Vertices.size;i++){
for(j=0;j<g1.Vertices.size;j++)
printf("%5d ",g1.edge[i][j]);
printf("\n");
}
}
文件重新组织一下,主要是声明顺序有些乱
xiaoxiaokun888 2012-08-31
  • 打赏
  • 举报
回复
头文件,还有函数的定义呢啊?
shen_wei 2012-08-31
  • 打赏
  • 举报
回复
tu\seqlist.h(6)

tu\adjmgraph.h(7)

这两个文件的定义是啥。。。
cj_c007 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
你没给出DataType和MaxSize的定义,我自己加了个

C/C++ code


typedef int DataType;
#define MaxSize 10


编译通过,所以你的这段代码本身没什么问题,可能是你的的某个类型定义和你包含的头文件里有重复的定义,改下名字就可以了。
[/Quote]
这个我有在main函数时定义的啊。代码是这样

其中我还有个头文件是引用到SeqList.h的,代码如下
#include "SeqList.h"
typedef struct
{
SeqList Vertices;//存放顶点的顺序表
int edge[MaxVertices][MaxVertices];//存放边的邻接矩阵
int numOfEdges;//边的条数
}AdjMGraph;

void Initiate(AdjMGraph *G,int n)//初始化
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(i==j)
G->edge[i][j]=0;
else
G->edge[i][j]=MaxWeight;//MaxWeight表示无穷大

}
G->numOfEdges=0;//边的条数为0
ListInitiate(&G->Vertices);//顺序表初始化
}

void InserVertex(AdjMGraph *G,DataType vertex)//在图G中插入顶点vertex
{
ListInsert(&G->Vertices,G->Vertices.size,vertex);//顺序表尾插入
}

void InsertEdge(AdjMGraph *G,int v1,int v2,int weight)//在图G中插入边<v1,v2>,权为weight
{
if(v1<0||v1>=G->Vertices.size||v2<0||v2>=G->Vertices.size)
{
printf("参数v1或参数v2越界出错!\n");
return;
}
G->edge[v1][v2]=weight;
G->numOfEdges++;
}

void DeleteEdge(AdjMGraph *G,int v1,int v2)//在图G中删除边<v1,v2>
{
if(v1<0||v1>=G->Vertices.size||v2<0||v2>=G->Vertices.size||v1==v2)
{
printf("参数v1或参数v2越界出错!\n");
return;
}
if(G->edge[v1][v2]==MaxWeight||v1==v2)
{
printf("该边不存在!\n");
return;
}
G->edge[v1][v2]=MaxWeight;
G->numOfEdges--;
}

int GetFirstVex(AdjMGraph G,int v)//在图G中寻找序号为v的顶点的第一个邻接顶点
{
int col;
if(v<0||v>G.Vertices.size)
{
printf("参数v越界出错\n");
return -1;
}
for(col=0;col<G.Vertices.size;col++)
if(G.edge[v][col]>0&&G.edge[v][col]<MaxWeight)
return col;
return -1;
}

int GetNextVex(AdjMGraph G,int v1,int v2)//在图G中寻找v1顶点的邻接顶点v2的下一个邻接顶点
{
int col;
if(v1<0||v1>G.Vertices.size||v2<0||v2>G.Vertices.size)
{
printf("参数v1或参数v2越界出错!\n");
return -1;
}
for(col=v2+1;col<G.Vertices.size;col++)
if(G.edge[v1][col]>0&&G.edge[v1][col]<MaxWeight)
return col;
return -1;


}
这里是main

#include<stdio.h>
#include<malloc.h>
typedef char DataType;
#define MaxSize 50
#define MaxVertices 50
#define MaxEdges 500
#define MaxWeight 10000
#define MaxQueueSize 50
#include "AdjMGraph.h"
#include "AdjMGraphCreate.h"
#include "AdjMGraphTraverse.h"
void Visit(DataType item)
{
printf("%c ",item);
}
void main(void)
{
AdjMGraph g1;
DataType a[]={'A','B','C'.'D','E'};
RowColWeight rcw[]={{0,1,10},{0,4,20},{1,3,30},{2,1,40},{3,2,50}};
int n=5,e=5;
int i,j;
CreatGraph(&g1,a,n,rcw,e);
printf("顶点的集合为:");
for(i=0;i<g1.Vertices.size;i++)
printf("%c ",g1.Vertices.list[i]);
printf("\n");
printf("权值的集合为:\n");
for(i=0;i<g1.Vertices.size;i++)
{
for(j=0;j<g1.Vertices.size;j++)
printf("%5d ",g1.edge[i][j]);
printf("\n");
}
}
运行时就出现了如下错误
tu\seqlist.h(6) : error C2371: 'SeqList' : redefinition; different basic types

tu\adjmgraph.h(7) : error C2371: 'AdjMGraph' : redefinition; different basic types
搞不清楚怎么回事啊
羽飞 2012-08-31
  • 打赏
  • 举报
回复
DataType是啥,怎么定义的
Corner 2012-08-31
  • 打赏
  • 举报
回复
你没给出DataType和MaxSize的定义,我自己加了个

typedef int DataType;
#define MaxSize 10

编译通过,所以你的这段代码本身没什么问题,可能是你的的某个类型定义和你包含的头文件里有重复的定义,改下名字就可以了。
丶随心 2012-08-31
  • 打赏
  • 举报
回复
把所有代码贴全了看一下啊

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧