You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问抽象类的SetWriteDP()函数?Qt Creator开发疑问

问题解答

一、HMI_API构造函数初始化列表的作用

在C++中,类的构造函数初始化列表核心作用如下:

  • 完成基类初始化:HMI_API应当继承自AbstractAPI或DPObject这类抽象基类,抽象基类无法直接实例化,子类必须通过初始化列表调用基类构造函数,完成基类成员与虚函数表的初始化,这也是HMI_API构造函数里能正常调用SetWriteDP()的前提——此时基类部分已准备就绪,成员函数可正常执行。
  • 初始化特殊成员:如果HMI_API包含const类型、引用类型的成员,必须在初始化列表中完成初始化,无法在构造函数体中赋值。
  • 提升运行效率:初始化列表直接调用成员的构造函数,避免了先默认构造再赋值的额外性能开销。

二、正确调用SetWriteDP()函数的方法

从报错信息来看,SetWriteDP()是非静态成员函数,必须通过类的实例对象调用,可按以下方式处理:

1. 复用已存在的HMI_API实例

项目自动生成的代码中HMI_API构造函数能调用该函数,说明项目中已存在HMI_API的实例,比如全局对象、单例对象:

  • 若为单例模式,通过单例接口获取实例后调用:
    HMI_API::getInstance()->SetWriteDP(/* 传入所需参数 */);
    
  • 若为全局对象,直接通过全局变量名调用:
    extern HMI_API g_hmiApi;
    g_hmiApi.SetWriteDP(/* 传入所需参数 */);
    

2. 直接创建HMI_API实例(若允许)

HMI_API能被构造说明它是具体类,可直接实例化后调用:

// 若基类构造需要参数,需在初始化时传入对应值
HMI_API hmiApi(/* 基类构造所需参数 */);
hmiApi.SetWriteDP(/* 传入所需参数 */);

注意:如果HMI_API的构造函数是私有/保护的(单例场景),此方式不可行,需复用已存在的实例。

3. 适配UI类调用场景

如果在UI类中调用,可将HMI_API实例作为UI类的成员变量,初始化后直接调用:

// UI类头文件声明
class MyUI : public QWidget {
private:
    HMI_API* m_hmiApi;
};

// UI类cpp文件实现
MyUI::MyUI(QWidget *parent) : QWidget(parent), m_hmiApi(new HMI_API(/* 构造参数 */)) {
    m_hmiApi->SetWriteDP(/* 传入所需参数 */);
}

内容的提问来源于stack exchange,提问作者TerminusEst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:30:17