问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言源文件之间的自定义类型(结构体)如何相互引用?

发布网友 发布时间:2022-05-01 22:32

我来回答

5个回答

热心网友 时间:2022-06-30 19:55

一个示例如下(项目包含两个文件 Source.cpp,Source1.cpp

1. Source1.cpp源代码如下:

//Source1.cpp
struct people{
    int id;
    int age;
};

2. Source.cpp源代码如下:

//Source.cpp
#include<stdio.h>
#include "Source1.cpp"

int main(){

    struct people Tommy = { 1, 21 };

    printf("Tommy的id=%d,年龄=%d\n", Tommy.id, Tommy.age);
    getchar();
    return 0;
}

运行结果如下:

希望对你有帮助~

追问C语言源文件如何引用其他文件的重定义类型

extern 重定义类型的原型
重定义类型的原型指哪个

追答

extern这样使用

extern struct people;

我的理解:结构体原型类似于函数原型吧

函数定义int fun(int a,int b){return a>b?a:b;}

其函数原型为 int fun(int a,int b);

所以我觉得结构体原型是 struct people;


这些概念 希望高手来解答,我也学习学习


此时上述示例的Sourc.cpp可以改为

#include<stdio.h>
#include "Source1.cpp"

extern struct people;

int main(){

    struct people Tommy = { 1, 21 };

    printf("Tommy的id=%d,年龄=%d\n", Tommy.id, Tommy.age);
    getchar();
    return 0;
}

程序仍然能正常运行

热心网友 时间:2022-06-30 19:55

网路上可以查到范例, 希望你能开得起来.

http://bytes.com/topic/c/answers/763674-how-declare-structures-reference-each-other


另外贴上网页范例,

struct B;
struct A
{
struct B * b;
};
struct B
{
struct A * a;
};

只要有一个原型宣告就可以了, 如果在不同的源文件, include就相当於写在同一个文件中.

但是这样会导致include顺序性*, 常用方法会是个别写外部参考的原型宣告, 建议以extern做标示.


---------------------------

我本来不太想直接写.


//temp1.h
struct temp2;
struct temp1{
struct temp2 *B;
};


//temp2.h
struct temp1;
struct temp2{
struct temp1 *A;
};


//temp_main.c
#include "temp1.h"
#include "temp2.h"
int main()
{
struct temp1 MainA;
struct temp2 MainB;
MainA.B = &MainB;
MainB.A = &MainA;
return 0;
}

热心网友 时间:2022-06-30 19:56

没能理解相互引用的意思,你是指在结构体定义时使用另一个结构体作为数据类型?

把两个结构体都定义在头文件中,然后互相包含,最上面加#program once 试试看,我不确定这样是否可以通过编译

热心网友 时间:2022-06-30 19:56

你直接把其中一个文件作为头文件导入,不就可以引用了么

热心网友 时间:2022-06-30 19:57

typedef struct tagMSG { // msg
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;

引用这个结构体只要
MGS msg;
即可用了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
未订阅苹果music自动扣款 分隔符和分页符的区别 提速快是看马力还是扭力 马力大提速快还是扭矩大提速快 体脂秤不准确怎样重新调试 为什么TVB连续剧里面的警察全部是西九龙重案组的? 为什么tvb电视剧中出现的警察经常是“西九龙重案组”的? 单相电表箱哪家公司口碑好? 牛郎织女人物形象 失题(末缺)(李颀)拼音版、注音及读音 简述科学的本质和特点 在com组件中,怎样把自定义的结构体作为,其接口方法的参数 C语言怎样统计 文件中 自定义结构体类型数组 中的结构体类型数据个数 求助:Delphi自定义结构体,发送服务器,服务器接收信息 C 语言的结构体要怎么写 结构体里面有那些东西 谢谢 举实例 谢谢大家了 关于MPI 自定义结构体的问题 如何在接口定义语言IDL中定义自定义结构体类型 c语言中如何自定义结构体数组长度 如何让自定义的结构体和类高亮显示 OPNET 自定义结构体 怎么向dll中传递自定义结构体作为函数参数 MFC中在哪里添加自定义的结构体 c++如何对自定义结构体排序 vector可以存放自定义的结构体吗 自定义一个结构体,结构体用于描述学生信息,结构体元素需要有:学生ID,学生名称,联系电话,总成绩四个字段 数据结构定义结构体的问题如何解决? 自定义的结构体,只分配一个sizeof的空间,是不是不需要malloc,直接定义一个结构体变量即可 自定义一个结构体,采用malloc或new进行动态内存分布 英科医疗股票能买吗?英科医疗300677?英科医疗股票发行价每股多少钱? 电脑下载什么P图软件最好 英科医疗为什么下跌还有上涨余地吗?2021英科医疗三季度业绩预告?股票英科医疗300677? 你好我的金帅冰箱第一次通电压缩机工作,完毕后就不在自动工作了。怎_百... W005桥推可以用什么来代替? 神钢挖掘机故障代码w005 什么 请问从广州火车站附近怎么坐车到云浮,最晚几点 晋AJW005这个车牌好不好? 云浮汽车总站有几点的车去连滩车站 yueaee yueaeew005可以放16内存卡吗? 如何实现含逗号的SQL排序 opporeno7充电不显示信息 常州凯发文化传媒有限公司怎么样? 20岁左右适合的护肤品 谁告诉我以前一些苏联的好听的歌,如莫斯科郊外的晚上 组团美国旅游要多少钱 魔兽世界 源生萨格里特 怎么获得 opporeno5有充电指示灯吗 魔兽世界7.3源生萨格里特怎么获得 魔兽世界7.3源生萨格里特怎么获得 源生萨格里特获得方法介绍 广州罡正法律咨询公司退保是真的吗?- 问一问 广州罡正法律咨询公司退保是真的吗? 专业退保公司靠谱吗