ZBLOG

struct st_answer_trueOrfalse { bool banswer; bool banswer_standard; bool bret; }; struct st_answer_choose { QList *banswer; QList *banswer_standard; bool bret; }; struct st_answer_choose_multiple { ...

在你提供的代码中,出现了 use of deleted function 'st_subject_Type::~st_subject_Type()' 的错误,这通常是因为你的结构体中包含指针类型,而这些指针在默认情况下不具备析构能力。具体来说,你的 st_answer_choosest_answer_choose_multiple 结构体中使用了 QList<QString>* 类型,这是一个指向动态分配内存的指针。

问题分析

  1. 成员变量是指针: 当结构体(如 st_subject_Type)被销毁时,若其中有指针类型成员而未定义相应的析构函数,将导致编译器删除默认析构函数。因为编译器无法确保安全地释放这些指针所占用的内存。

  2. 未自定义析构函数: 对于 st_subject_Type 类型,如果其中包含了指针,而没有显式地定义析构函数,编译器会删除它,因为无法自动管理这些动态分配的资源。

解决方案

  1. 更改为智能指针: 可以将指向 QList<QString> 的原始指针替换为智能指针(如 std::unique_ptr<QList<QString>>),以自动管理内存。
   #include <memory> // 引入头文件

   struct st_answer_choose {
       std::unique_ptr<QList<QString>> banswer;
       std::unique_ptr<QList<QString>> banswer_standard;
       bool bret;
   };

   struct st_answer_choose_multiple {
       std::unique_ptr<QList<QString>> banswer;
       std::unique_ptr<QList<QString>> banswer_standard;
       bool bret;
   };
  1. 添加自定义析构函数: 如果仍然希望使用裸指针,可以自定义析构函数并手动释放内存,但这需要小心处理,以避免内存泄漏:
   union st_subject_Type {
       st_answer_blank blank ;
       st_answer_questions questions ;
       st_answer_trueOrfalse trueOrfalse;
       st_answer_choose choose; 
       st_answer_choose_multiple choose_multiple;

       // 自定义析构函数
       ~st_subject_Type() {
           delete choose.banswer;         // 手动释放资源
           delete choose.banswer_standard; // 手动释放资源
           delete choose_multiple.banswer; // 手动释放资源
           delete choose_multiple.banswer_standard; // 手动释放资源
           // 其他必要的清理工作...
       }
   };
  1. 考虑拷贝语义: 如果你希望该结构体能够正确拷贝和赋值,还需要实现复制构造函数和赋值操作符,以确保对动态分配资源进行深拷贝。

以下是可能的示例代码:

struct st_answer_choose {
    QList<QString> *banswer = nullptr;
    QList<QString> *banswer_standard = nullptr;
    bool bret;

    ~st_answer_choose() {
        delete banswer;         
        delete banswer_standard; 
    }

    // 可选:自定义拷贝/移动操作符等...
};

通过以上方法,你应该可以解决该编译错误。在修改完代码后,请重新编译并检查是否还有其他问题。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21452

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?