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

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

问题:

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

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.kler.cn/a/610317.html

相关文章:

  • 多源最短路:Floyd算法の暴力美学
  • LeetCode算法题(Go语言实现)_11
  • 31天Python入门——第14天:异常处理
  • DeepSeek V3-0324升级:开启人机共创新纪元
  • 算法模型从入门到起飞系列——递归(探索自我重复的奇妙之旅)
  • AI的未来在手机里!
  • 鸿蒙生态全解析:应用适配分享
  • 2-2 MATLAB鮣鱼优化算法ROA优化CNN超参数回归预测
  • QLoRA和LoRA 微调
  • 01-系统编程
  • 从零开始的大模型强化学习框架verl解析
  • AWE 2025:当AI科技遇见智能家居
  • 基于javaweb的SpringBoot线上网络文件管理系统设计与实现(源码+文档+部署讲解)
  • 【Linux网络】——Socket网络编程
  • 6. 理解中间件与认证中间件
  • 失踪人口回归之Java开发工程师面试记录第二篇
  • AI小白的第七天:必要的数学知识(概率)
  • 前端面试:如何去衡量用户操作过程中否卡顿?
  • LLM实践(二)——基于llama-factory的模型微调
  • 蓝桥杯高频考点——二分(含C++源码)