70,028
社区成员




//自定义头文件
#ifndef _TOURISM_H_
#define _TOURISM_H_
#include<stdio.h>
#include<String.h>
struct Admin{
char* ID;
char* PW;
struct Admin *next;
};
struct Users{//用户
char* ID;
char* PW;//密码
int vip;//类型
struct Users *next;
};
struct Scenic{//景区
char* Name;
char* News;
char* Information;
char* Village;
char* Luxian[3];
struct Scenic *next;
};
struct Hotel{//酒店
char* Name;
char* Location;
struct Hotel *next;
};
struct Restaurant{//餐馆
char* Name;
char* Location;
struct Restaurant *next;
};
struct Book{//预订
char* ID;
char* scenic;
char* hotel;
char* restaurant;
char* time;
struct Book *next;
};
#endif
//
#include<stdio.h>
#include<malloc.h>
#include "tourism.h"
#include<String.h>
#include<stdlib.h>
Admin* adminhead1;
Users* usershead1;
Scenic* scenichead1;
Hotel* hotelhead1;
Restaurant* resthead1;
Book* bookhead1;
struct Admin* admininitia();
struct Users* userinitia();
struct Scenic* scenicinitia();
struct Hotel* hotelinitia();
struct Restaurant* restinitia();
struct Book* bookinitia();
void interfaces(Book* b);
int main(){
struct Admin* adminhead=admininitia();
Admin* a=adminhead;
adminhead1=adminhead;
struct Users* userhead=userinitia();
Users* u=userhead;
usershead1=userhead;
struct Scenic* scenichead=scenicinitia();
Scenic* s=scenichead;
scenichead1=scenichead;
struct Hotel* hotelhead=hotelinitia();
Hotel* h=hotelhead;
hotelhead1=hotelhead;
struct Restaurant* resthead=restinitia();
Restaurant* re=resthead;
resthead1=resthead;
struct Book* bookhead=bookinitia();
Book* b=bookhead;
bookhead1=bookhead;
interfaces(b);
}
结构定义改成这样:
typedef struct Admin {
...
}Admin;
或者 main.c 变量定义改为:
struct Admin* adminhead1;
或者在main.c定义adminhead1的前面加上:
typedef struct Admin Admin;
我的意思是,你要是懒得改代码,那就去改文件扩展名,叫做main.cpp就没这个问题了。
你的文件名叫做main.c ,所以编译器执行的是C标准而不是C++
在C标准里不能省略关键字struct 。
struct Admin 才是一个C意义的类型名,单独的Admin则不是。
以此类推。
1、假定,#include "tourism.h" 这个头文件就是你开始的代码
2、struct Admin* admininitia();void interfaces(Book* b);等是函数的声明,我全部将它们定义为一个空函数,例如,像这样:
struct Admin* admininitia() {
return NULL;
}
3、我使用Dev C++对它进行编译,一点问题都没有,你用什么编译器?
4、另外,struct Admin* admininitia() ;为什么要这样写?怎么不直接 Admin* admininitia() ;有点奇怪喔。
extern struct Admin* admininitia();
...
另外,你还需要在工程中包含某个lib或者obj(实现admininitia()等等的模块),或者在命令行链接的时候指出