吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 690|回复: 6
收起左侧

[已解决] C++头文件定义的一些问题& -【已解决】

[复制链接]
xcj123 发表于 2023-8-31 19:45
本帖最后由 xcj123 于 2023-9-6 18:14 编辑

我在练习C语言时,在Init_The_Interface.h中定义了结构体 struct Face并声明。在Init_The_Interface.cpp中声明了#include"Init_The_Interface.h"头文件,可以正常使用,但在game.cpp中声明了extern struct Face face;没有声明#include"Init_The_Interface.h"头文件,应为会报错重定义。结果却报错 不允许使用不完整的类类型 Face,请问怎么办,我对头文件放置的东西和cpp文件放置的东西有点迷糊,网上也没有看到很好的教程,求大佬推荐一份
image.png
image.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

DEATHTOUCH 发表于 2023-9-1 00:09
因为你在game.cpp没有include头文件,所以找不到Face的定义。

一般头文件都是要include的,所以不要把变量定义在头文件就行了。
apull 发表于 2023-9-1 02:49
[C] 纯文本查看 复制代码
game.cpp中加#include "Init_The_Interface.h"

Init_The_Interface.h中通过宏定义避免重定义
#ifndef INIT_THE_INTERFACE_H
#define INIT_THE_INTERFACE_H
//Init_The_Interface.h的定义内容
#endif

也可以在Init_The_Interface.h开头加#pragma once 避免多次编译
yes2 发表于 2023-9-1 09:00
不要在头文件里定义变量,因为你include一次就会定义一次,那么就会重定义。如果各个cpp之间的face都是各自独有,互不干涉的,可以试试static struct Face face,不过我没试过这么玩,因为确实不应该在头文件中定义变量。
正常来说,你可以在Init_The_Interface.cpp中定义这个变量,并且定义一个函数用于获取这个变量,比如struct Face* GetFace(),然后头文件里可以声明该函数,这样game.cpp也可以通过这个函数获取到face变量。
不想定义接口函数也可以,道理是一样的,在Init_The_Interface.cpp中定义这个变量,头文件里用extern struct Face face声明
hdydy 发表于 2023-9-1 09:13
头文件里声明变量extern struct Face face;
某个cpp文件里定义变量该变量struct Face face;
cpp文件include该头文件
woflant 发表于 2023-9-1 10:34
头文件使用extern关键字声明结构体,cpp文件引用头文件

extern关键字用法很多
 楼主| xcj123 发表于 2023-9-1 16:43
谢谢你们的解答,我昨天加了头文件后,清理后允许会报错头文件内容重定义,今天清理后重新生成就好了,可能是没有重新生成吧。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 22:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表