QT/C++ 未知重写说明符解决方案

2 篇文章 0 订阅
1 篇文章 0 订阅

错误信息:
未知重写说明符

产生原因:

头文件相互包含并且互相声明了对方类的对象。即
“1.h"  包含了 “2.h"  里面含class A{ }; 类A里面含有B b;
“2.h"  包含了 “1.h"  里面含class B{ }; 类B里面含有A a;
从实现的角度上看由于1.h 2.h处于不同文件 其编译顺序肯定有先有后,假如先编译了含 “1.h" 的cpp文件,那么 “1.h" 中的B b对于编译器来说是未知的,这样就产生了一个 超前编译的错误。
第二个错误类A中包含了类B,类B中又包含了类A, 这是一个无限的包含过程! 为了避免这个情况应把二者都声明未指针,而且为了避免头文件相互包含中的"重复包含"我们需要在俩个头文件中加入避免重复包含的宏定义!例如#ifndef SHOWWAVE_H
#define SHOWWAVE_H
    文件体     
#endif 俩个头文件里都需要加入!这样就能保证俩个头文件都只能包含一次,或者可以加入新的宏命令  #pragma once 文件体实现原理是相似的。

解决方案:


头文件重包含产生的问题难以解决,建议尽量避免产生这种情况!但是在图形化界面的应用中,经常会产生一种情况-窗口之间的来回切换,这是A窗口需要包含B窗口的类 B窗口需要包含A窗口的类 这里可以采取两种解决方案:
一.写在同一个.h文件中。

把俩个类写在同一个.h文件中。并且需要声明后面的那个类 
                                   extern class A;
                                   class B{ };
                                   class A{ };
.写在不同.h文件中。

现实实现中,我们避免不了把不同的类放到不同的.h文件中,这是良好的编程规范。为此我们无法使用声明的方法,此时可采用的方法是声明时使用基类指针 使用时调用子类的构造函数,因为基类指针在编译时往往可以避免超前编译这个问题。

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值