帮忙看下 我想用类的前置声明来实现两个类相互调用 编译时没问题 在运行阶段会报错
3条回答 默认 最新
- Kwan的解忧杂货铺@新空间代码工作室 2024-02-28 16:42关注
zhangyubo325 下午好🌅🌅🌅
本答案参考通义千问根据您的代码,您想要在
view_Ftcy_Test
类中实例化ctrl_Sp
类,并在ctrl_Sp
类中有一个view_Ftcy_Test
类型的指针。在C++中,如果两个类没有完全定义就互相引用,编译器通常不会有问题,但运行时可能会出错,因为它们可能有不同的内存布局。为了实现这种相互调用,你需要确保以下几点:-
类的声明和定义:先在
view_Ftcy_Test.h
中对ctrl_Sp
进行预声明(forward declaration),然后在view_Ftcy_Test.cpp
或一个独立的头文件ctrl_Sp.h
中定义ctrl_Sp
。在
view_Ftcy_Test.h
:class ctrl_Sp;
在
ctrl_Sp.h
:#ifndef CTRL_SP_H #define CTRL_SP_H // Include the forward declaration of view_Ftcy_Test #include "view_Ftcy_Test.h" class ctrl_Sp : public QObject { // Class definition... }; #endif // CTRL_SP_H
-
构造函数参数:在
view_Ftcy_Test
的构造函数中,将ctrl_Sp
的指针作为参数传递给它。在
view_Ftcy_Test.cpp
:#include "ctrl_Sp.h" view_Ftcy_Test::view_Ftcy_Test(QWidget *parent /*= nullptr*/) : QWidget(parent), m_ctrlSp(new ctrl_Sp(this)) { // Initialize m_ctrlSp... }
-
成员变量的初始化:在
ctrl_Sp
的构造函数中,确保正确初始化view_Ftcy_Test
指针。在
ctrl_Sp.cpp
:ctrl_Sp::ctrl_Sp(QObject *parent /*= nullptr*/) : QObject(parent), m_viewFtcyTest(nullptr) { // Set m_viewFtcyTest to a pointer to the view_Ftcy_Test object in the constructor m_viewFtcyTest = new view_Ftcy_Test(this); } // Add a destructor for m_viewFtcyTest if needed ~ctrl_Sp() { delete m_viewFtcyTest; }
-
成员函数的使用:现在在
ctrl_Sp
类中,您可以安全地使用m_viewFtcyTest
了。
确保在所有涉及这两个类的地方遵循上述步骤,这样应该可以解决运行时错误。如果问题仍然存在,请检查是否有其他未声明的变量或函数导致的错误。
解决 无用评论 打赏 举报 -
悬赏问题
- ¥30 YOLO检测微调结果p为1
- ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
- ¥15 DS18B20内部ADC模数转换器
- ¥15 做个有关计算的小程序
- ¥15 MPI读取tif文件无法正常给各进程分配路径
- ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
- ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
- ¥15 setInterval 页面闪烁,怎么解决
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题