当前位置: 首页 > news >正文

两头文件互引问题解决(前置声明)

问题:

想必正在基础阶段学习的朋友们都遇见过以下问题吧

widget.h

otherwidget.h

        如上问题是,我在widget.h中引用了otherwidget.h ,在ohterwidget中又引用了widget.h,两个头文件互相引用产生了报错

解决办法:

        那么我们该如何解决呢,就用到了前置声明

        看这样完美解决了两头文件互引的问题,对 Widget 类进行了前置声明,这意味着代码里知晓 Widget 类的存在,但并未包含其完整定义

        但是注意什么叫做未包含完整定义呢,指的是编译器仅知道某个类或类型的存在,但不了解其具体的实现细节,像类的成员变量、成员函数的具体实现等。

        在具体一点,以下代码大家都应该知道吧是显示widget窗口,不过因为otherwidget并未包含其完整定义所以导致,我不知道它来自于什么,我只知道他的类型是Widget *widget

this->widget->show();

升级:

 所以我们还需要进入我们的.cpp文件,再去加入#include "widget",就包含了器完整定义

otherwidget.cpp

这时又出现了新问题,嘶~不是会报错吗,怎么又能引用了,所以注意这是widget.cpp文件 ,那我们看下面的解释:

        在 otherwidget.h 中,使用了 class Widget; 进行前置声明,这仅仅让编译器知道 Widget 是一个类名,但不清楚该类的具体实现细节。如果在 OtherWidget 类的实现中需要访问 Widget 类的成员变量或者调用其成员函数,就必须包含 Widget 类的完整定义,也就是要包含 widget.h 头文件。

头文件和源文件的分工

头文件(.h ):主要用于声明类、函数、常量等,为其他文件提供接口。头文件通常会使用头文件保护机制(如 #ifndef#define#endif)来避免重复包含。

源文件(.cpp:负责实现头文件中声明的类和函数。在源文件里,会包含必要的头文件,以获取相关的声明信息,进而完成具体的实现。

所以C++是不是很神奇呢,当然我们需要两个窗口互相访问的时候不止可以用这种方法,还可以使用Qt的特征的信号和槽来实现……

相关文章:

  • 系统思考—第五项修炼
  • Java地图坐标查询距离内经纬度范围,及距离大小
  • Android面试之算法总结
  • Azure SDK 使用指南
  • 如何保障kafka的数据不会重复消费呢,如何防止漏掉呢
  • Es结合kibana查询
  • PyTorch量化技术教程:第一章 PyTorch基础入门
  • 如何在 Windows 上安装并使用 Postman?
  • 问题:md文档转换word,html,图片,excel,csv
  • SICAR标准 汽车焊装生产线触摸屏操作说明
  • LeetCode 第25、27、28题
  • 动态合并任意连续相同行
  • Linux 创建用户和用户组,设置主目录
  • vue中实现元素在界面中自由拖动
  • Flink介绍与安装
  • 4.(vue3.x+vite)接入echarts
  • 前端工程化开篇
  • Redis 如何保证数据一致性:从原理到实践的全面解析
  • 【Flutter入门】1. 从零开始的flutter跨平台开发之旅(概述、环境搭建、第一个Flutter应用)
  • 基于微信小程序的仓储管理系统+论文源码调试
  • 永久基本农田竟沦为垃圾场,湖南湘潭回应:全面启动专项整治
  • 上海天文馆走进徐家汇书院,XR沉浸式天文科普体验再推力作
  • 女排奥运冠军宋妮娜:青少年保持身心健康才能走得更远
  • 国际金价下跌,中概股多数上涨,穆迪下调美国主权信用评级
  • 浙江省委金融办原副主任潘广恩被“双开”
  • 上百家单位展示AI+教育的实践与成果,上海教育博览会开幕