当前位置: 首页 > 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的特征的信号和槽来实现……

http://www.dtcms.com/a/91543.html

相关文章:

  • 系统思考—第五项修炼
  • 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应用)
  • 基于微信小程序的仓储管理系统+论文源码调试
  • Linux程序性能分析
  • 蓝之洋科技以AI智能制造引领变革,推动移动电源产业迈向高端智能化!
  • vue创建子组件步骤及注意事项
  • 安装samba脚本
  • 04_JavaScript循环结构
  • kafka基础
  • 【蓝桥杯—单片机】数模电路专项 | 真题整理、解析与拓展 | 省赛题 (更新ing...)
  • 【DeepSeek大语言模型】基于DeepSeek和Python的高光谱遥感从数据到智能决策全流程实现与城市、植被、水体、地质、土壤五维一体应用
  • Docker Compose介绍
  • JavaPro