求助:如何在多个文件中使用同一个结构体

fengbingchun
博客专家认证
2011-07-07 02:06:35
假如有2个头文件,2个执行文件,分别为A.h, B.h, A.cpp, B.cpp;另有一C.pp,
此c.pp调用A文件中的函数
即 #include "A.h"

在A.h文件中定义了一个结构体:
struct struct_1
{
int a;
int b;
}

此结构体在A.h的函数声明中,多次用到,包括参数和返回值;

在B.h文件中也要用到struct_1结构体;

在A.cpp执行文件中,
#incldue "B.h"
因为A.cpp中许多函数要调用B文件里的函数。

那么此结构体struct_1该如何定义呢,分别在A.h和B.h中定义不行。
该如何做?
...全文
2535 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
tclxspy 2011-08-10
  • 打赏
  • 举报
回复
7L是对的,首先添加头文件,然后用外部变量extern
luckyxiaoxuan 2011-07-07
  • 打赏
  • 举报
回复
最好是单独再写一个.h文件包含这个结构体,谁用到就包含进去。
懒得打字 2011-07-07
  • 打赏
  • 举报
回复
额,为什么不用namespace呢,那么好用的东西,清爽明了
菜鸟一个 2011-07-07
  • 打赏
  • 举报
回复
本人觉得 你把结构体 写在b.h中就OK了
不用那么像他们说的那么麻烦吧!
你用c.cpp #include A.H
又在A.H中 引入 b.h
所以觉得 你把结构体 放在b.h中 就都能引用到了啊。
何必那么麻烦呢 还是我想简单了。。
mibbadman 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 fengbingchun 的回复:]
#ifndef __A_H__
是加在
#include "stdafx.h"

的前面还是后面呢?
[/Quote]

……当然是前面
fengbingchun 2011-07-07
  • 打赏
  • 举报
回复
#ifndef __A_H__
是加在
#include "stdafx.h"

的前面还是后面呢?
northcan 2011-07-07
  • 打赏
  • 举报
回复
如添加个my_def.h头文件:

#ifndef __MY_DEF_H__
#define __MY_DEF_H__

// 结构体定义
struct struct_1
{
int a;
int b;
}

#endif // __MY_DEF_H__

然后用到结构体struct_1定义的文件
#include "my_def.h"
northcan 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fengbingchun 的回复:]
谢谢,#pragma once
如何加呢?
我是将liunx下的c,转换成c++
[/Quote]
如:

#ifndef __A_H__
#define __A_H__

struct struct_1
{
int a;
int b;
}

#endif // __A_H__
fengbingchun 2011-07-07
  • 打赏
  • 举报
回复
源代码是在liunx下用c写的,我现在想将源代码移植到windows xp下,用c++实现,源A.h和B.h,均分别包含很多结构体,而且B文件中用到了一些A文件中定义的结构体,但是源代码中并没有互包含头文件,即B头文件中包含A头文件,确能正常运行,但是在windows xp下,按照原先的就会出错,在B中用到A中的结构体就说没有定义,而在源代码中确不会出错。
张祠 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 q191201771 的回复:]
另外写一个.h 文件 定义这个结构体 类型
或者 在b.h 中包含下a.h 不过这样就包含了很多不必要的东西 印象编译速度
[/Quote]
up
c_losed 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 q191201771 的回复:]

linux
下不能使用 #prama once吧
这个貌似是windows下专用的

linux下使用
#ifndef
#define
#endif
[/Quote]

++
一开始当windows处理了。。。
c_losed 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fengbingchun 的回复:]

引用 2 楼 bdmh 的回复:
b.h中引用a.h
不过建议,你可以把struct单独定义到一个和a,b互不牵扯的h中


谢谢!
a.h头文件中有很多结构体,b.h文件中有些地方也需要这些结构体,另外在c.pp中也会用到a.h中结构体的定义。
我试着在b.h中#include "a.h"会提示出错,说结构体重定义
[/Quote]
b.h中找到重复定义的结构体
注释掉44



[Quote=引用 9 楼 fengbingchun 的回复:]

引用 3 楼 c_losed 的回复:
唔 加上#pragma once


谢谢,#pragma once
如何加呢?
我是将liunx下的c,转换成c++
[/Quote]
.h文件头
就想叫yoko 2011-07-07
  • 打赏
  • 举报
回复
linux
下不能使用 #prama once吧
这个貌似是windows下专用的

linux下使用
#ifndef
#define
#endif
fengbingchun 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 c_losed 的回复:]
唔 加上#pragma once
[/Quote]

谢谢,#pragma once
如何加呢?
我是将liunx下的c,转换成c++
fengbingchun 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bdmh 的回复:]
b.h中引用a.h
不过建议,你可以把struct单独定义到一个和a,b互不牵扯的h中
[/Quote]

谢谢!
a.h头文件中有很多结构体,b.h文件中有些地方也需要这些结构体,另外在c.pp中也会用到a.h中结构体的定义。
我试着在b.h中#include "a.h"会提示出错,说结构体重定义
至善者善之敌 2011-07-07
  • 打赏
  • 举报
回复
A中定义成全局的,然后再B中 #include "A.h"

然后
extern struct struct_1;
序员 2011-07-07
  • 打赏
  • 举报
回复
很简单
A.h 中

struct myStruct
{
int a;
...
};
extern myStruct g_struct;

在A.cpp中
是真正的g_struct实例
#include "A.h"
......
myStruct g_struct;//定义


这样,在其他模块中只需要#include “A.h" 就可以使用g_struct了

就想叫yoko 2011-07-07
  • 打赏
  • 举报
回复
另外写一个.h 文件 定义这个结构体 类型
或者 在b.h 中包含下a.h 不过这样就包含了很多不必要的东西 印象编译速度
猿创日记 2011-07-07
  • 打赏
  • 举报
回复
你是要用到同一个结构体变量还是结构体类型啊?
类型的话随便把结构体定义到.h文件里面,然后包含一下头文件就可以啦。
变量的话可以全局,也可以类变量,然后通过类变量获取成员变量。
c_losed 2011-07-07
  • 打赏
  • 举报
回复
唔 加上#pragma once
加载更多回复(2)

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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