【问题标题】:How can I access functions of this abstract class?我怎样才能访问这个抽象类的功能?
【发布时间】:2022-12-14 18:06:52
【问题描述】:

我目前正在使用 UI 工具 (Qt Creator 9.5.9) 来创建 UI 界面。在弄乱该工具时,我遇到了以下问题: 以下代码来自新建工程时自动生成的cpp文件。 在顶部有一些我认为可用于访问和可能更改数据点的函数。 我想使用函数 SetWriteDP() 将我的数据写入数据点。

/**
    // register ids
    bool registerReadIds(const QList<unsigned int> &ids);
    bool registerReadIds(const QUintSet &ids);
    bool registerReadIds(const QUintSet &ids, void (*func)(void*, const QUintSet &));
    bool registerWriteIds(const QList<unsigned int> &ids);
    bool registerWriteIds(const QUintSet &ids);

    // read data point values
    unsigned int GetReadDP(const unsigned int &id) const;
    int GetReadDPInt(const unsigned int &id) const;
    float GetReadDPFloat(const unsigned int &id) const;
    QString GetReadDPString(const unsigned int &id) const;

    // write data point values
    void SetWriteDP(const unsigned int &id, const unsigned int &value);
    void SetWriteDP(const unsigned int &id, const int &value);
    void SetWriteDP(const unsigned int &id, const float &value);
    void SetWriteDP(const unsigned int &id, const QString &value);

    // execute sql statement
    QSqlQuery execSqlQuery(const QString &query, bool &success) const;



**/

#include "hmi_api.h"
#include "widget.h"
#include "ui_arbaseform.h"
#include <iostream>


HMI_API::HMI_API(QWidget *parent) :
    AbstractAPI(parent), m_ui(NULL)
{
    Widget *widget = dynamic_cast<Widget *>(parent);
    if(!widget) return;
    m_ui = widget->ui;
    QUintSet readIdsToRegister, writeIdsToRegister;
    writeIdsToRegister.insert(10001);
    registerReadIds(readIdsToRegister);
    registerWriteIds(writeIdsToRegister);
    SetWriteDP(100001, 69);
}

我尝试以不同的方式在另一个 cpp 文件中使用该函数:

HMI_API.SetWriteDP() HMI_API.Abstract_API.SetWriteDP() 这导致了这个错误:expected unqualified-id before 。令牌

抽象API::SetWriteDP() 导致此错误:无法在没有对象 AbstractAPI::SetWriteDP() 的情况下调用成员函数 'void DPObject::SetWriteDP(const unsigned int&, const int&, unsigned int)';

我尝试制作一个导致此错误的 DPObject:无法将变量“test”声明为抽象类型“DPObject”

我现在真的不知道如何访问此功能。有人可以向我解释在“HMI_API::HMI_API(QWidget *parent) :”之后发生了什么,为什么可以在该块中使用该函数以及我如何使我可以使用该函数。

我尝试阅读文档,但现在文档中的任何地方都提到了这个功能。

该函数在我发布的代码 sn-p 中有效,但当我想在另一个函数中使用它时却不起作用,我知道它是因为一些关于类的东西,但我不明白在这种情况下如何解决这个问题。

提前致谢!

【问题讨论】:

    标签: qt user-interface qt-creator


    【解决方案1】:

    我怎样才能让我使用这个功能。

    我可能是错的,但根据我对 C++ 的理解,你首先必须创建一个类的对象,在这种情况下是

    HMI_API *uiName = new HMI_API(some_parent_obj);
    

    由于 QWidget 是您之前创建的 QWidget,因此您可以使用 .

    uiName.SetWriteDP(x,y);
    

    有人可以向我解释一下“HMI_API::HMI_API(QWidget *parent) 之后会发生什么:

    在“HMI_API::HMI_API(QWidget *parent)”之后,该类清楚地表明它继承了类 AbstractAPI 和 m_ui 的基本功能,您可以在此处了解有关继承的更多信息:https://www.learncpp.com/cpp-tutorial/basic-inheritance-in-c/

    之后我不确定,但看起来它只是创建了一些基本功能,因此您可以使用该类调用函数。

    【讨论】:

    • 您没有正确调用构造函数。一种方法是使用HMI_API *uiName = new HMI_API(some_parent_obj);
    • 当我尝试调用构造函数时出现此错误: : expected primary-expression before ')' token HMI_API *uiName = new HMI_API(&QWidget); ^
    • 调用构造函数错误的另一种方式相同:')'标记之前的预期主表达式 HMI_API::HMI_API(&QWidget); ^ 错误:无法直接调用构造函数“HMI_API::HMI_API”[-fpermissive]
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2021-02-12
    相关资源
    最近更新 更多