zhangyubo325 2024-02-28 16:41 采纳率: 0%
浏览 4

C++实现两个类的相互调用

帮忙看下 我想用类的前置声明来实现两个类相互调用 编译时没问题 在运行阶段会报错

img

img

  • 写回答

3条回答 默认 最新

  • 关注

    zhangyubo325 下午好🌅🌅🌅
    本答案参考通义千问

    根据您的代码,您想要在view_Ftcy_Test类中实例化ctrl_Sp类,并在ctrl_Sp类中有一个view_Ftcy_Test类型的指针。在C++中,如果两个类没有完全定义就互相引用,编译器通常不会有问题,但运行时可能会出错,因为它们可能有不同的内存布局。为了实现这种相互调用,你需要确保以下几点:

    1. 类的声明和定义:先在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
      
    2. 构造函数参数:在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...
      }
      
    3. 成员变量的初始化:在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;
      }
      
    4. 成员函数的使用:现在在ctrl_Sp类中,您可以安全地使用m_viewFtcyTest了。

    确保在所有涉及这两个类的地方遵循上述步骤,这样应该可以解决运行时错误。如果问题仍然存在,请检查是否有其他未声明的变量或函数导致的错误。

    评论

报告相同问题?

问题事件

  • 修改了问题 2月28日
  • 创建了问题 2月28日

悬赏问题

  • ¥15 求达梦8数据库安装包
  • ¥15 YOLOv8模型网络结构更改后报错
  • ¥15 深度学习中梯度为None
  • ¥15 zynq烧写程序到flash后不运行
  • ¥15 (标签-51单片机|关键词-#include)
  • ¥15 裸板ESD问题的思考与实验
  • ¥15 electron+python
  • ¥50 远程调试PLC的解决方案的问题
  • ¥15 微信收付通中,自动分账的情况下,某一接收方分账失败了系统会自动在发起重新分账吗
  • ¥15 宝塔ssl证书一直待待验证