求助 include自定义头文件后依然是 [Error] unknown type name

Kialeft 2022-01-07 21:25:58

//自定义头文件

#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);

}
 

 

...全文
2770 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_47033079 2022-01-08
  • 打赏
  • 举报
回复 1

结构定义改成这样:
typedef struct Admin {
...
}Admin;
或者 main.c 变量定义改为:
struct Admin* adminhead1;
或者在main.c定义adminhead1的前面加上:
typedef struct Admin Admin;

forever74 2022-01-08
  • 打赏
  • 举报
回复

我的意思是,你要是懒得改代码,那就去改文件扩展名,叫做main.cpp就没这个问题了。

forever74 2022-01-08
  • 打赏
  • 举报
回复 1

你的文件名叫做main.c ,所以编译器执行的是C标准而不是C++
在C标准里不能省略关键字struct 。
struct Admin 才是一个C意义的类型名,单独的Admin则不是。
以此类推。

疯狂刷题中 2022-01-08
  • 打赏
  • 举报
回复

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()等等的模块),或者在命令行链接的时候指出

70,028

社区成员

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

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