C++ Qt C++;无法调用成员函数'';毫无目的

C++ Qt C++;无法调用成员函数'';毫无目的,c++,qt,function,user-interface,C++,Qt,Function,User Interface,我不断地发现这个错误: cannot call member function 'QString Load::loadRoundsPlayed()'without object 现在我对C++和QT很陌生,所以我不知道这意味着什么。我试图调用另一个类中的函数来设置一些LCDNumber上的数字。下面是Load.cpp,其中包含以下函数: #include "load.h" #include <QtCore> #include <QFile> #include <Q

我不断地发现这个错误:

cannot call member function 'QString Load::loadRoundsPlayed()'without object
现在我对C++和QT很陌生,所以我不知道这意味着什么。我试图调用另一个类中的函数来设置一些LCDNumber上的数字。下面是Load.cpp,其中包含以下函数:

#include "load.h"
#include <QtCore>
#include <QFile>
#include <QDebug>

Load::Load() //here and down
{}

QString Load::loadRoundsPlayed()
{
    QFile roundsFile(":/StartupFiles/average_rounds.dat");

    if(!roundsFile.open(QFile::ReadOnly | QFile::Text))
    {
        qDebug("Could not open average_rounds for reading");
    }

    Load::roundsPlayed = roundsFile.readAll();
    roundsFile.close();
    return Load::roundsPlayed;
}
    #include "mainwindow.h"
     #include "ui_mainwindow.h"
    #include "load.h"
    #include <QLCDNumber>

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        MainWindow::startupLoad();
    }

    MainWindow::~MainWindow()
    {
        delete ui;
    }
    void MainWindow::startupLoad()
    {
        ui->roundPlayer_lcdNumber->display(Load::loadRoundsPlayed()); //right here
    }
#包括“load.h”
#包括
#包括
#包括
Load::Load()//在这里和下面
{}
QString Load::loadRoundsPlayed()
{
QFile roundsFile(:/startupbiles/average_rounds.dat”);
如果(!roundsFile.open(QFile::ReadOnly | QFile::Text))
{
qDebug(“无法打开平均读取回合”);
}
Load::roundsPlayed=roundsFile.readAll();
roundsFile.close();
返回载荷::圆形展开;
}
这是负载。h:

    #ifndef LOAD_H
     #define LOAD_H

    #include <QtCore>

    class Load
    {
    private:
        QString roundsPlayed; //and here
    public:
        Load();
        QString loadRoundsPlayed(); //and here
    };

    #endif // LOAD_H
\ifndef LOAD\u H
#定义负载
#包括
类负载
{
私人:
QString roundsPlayed;//在这里
公众:
加载();
QString loadRoundsPlayed();//这里
};
#endif//LOAD_H
最后是我调用函数的地方:

#include "load.h"
#include <QtCore>
#include <QFile>
#include <QDebug>

Load::Load() //here and down
{}

QString Load::loadRoundsPlayed()
{
    QFile roundsFile(":/StartupFiles/average_rounds.dat");

    if(!roundsFile.open(QFile::ReadOnly | QFile::Text))
    {
        qDebug("Could not open average_rounds for reading");
    }

    Load::roundsPlayed = roundsFile.readAll();
    roundsFile.close();
    return Load::roundsPlayed;
}
    #include "mainwindow.h"
     #include "ui_mainwindow.h"
    #include "load.h"
    #include <QLCDNumber>

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        MainWindow::startupLoad();
    }

    MainWindow::~MainWindow()
    {
        delete ui;
    }
    void MainWindow::startupLoad()
    {
        ui->roundPlayer_lcdNumber->display(Load::loadRoundsPlayed()); //right here
    }
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括“load.h”
#包括
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
MainWindow::startupLoad();
}
MainWindow::~MainWindow()
{
删除用户界面;
}
void主窗口::startupLoad()
{
ui->roundPlayer_lcdNumber->display(Load::loadRoundsPlayed());//就在这里
}

当我运行这个时,我得到了那个错误。我不知道这意味着什么,所以如果有人能帮助我,我将不胜感激。谢谢。

错误描述非常清楚

无法在没有对象的情况下调用成员函数“QString Load::loadRoundsPlayed()”

如果不创建类的实例,则不能调用非静态的成员函数


查看您的代码,您可能需要执行以下操作:

Load load;
ui->roundPlayer_lcdNumber->display(load.loadRoundsPlayed()); //right here
还有两种选择:

  • 如果不希望将它们与具体实例或实例关联,请将
    loadRoundsPlayed
    设置为static和
    roundsPlayed
    static
  • 使
    loadRoundsPlayed
    static并通过复制返回
    QString
    ,这将在函数内部本地创建。差不多
:


错误描述非常清楚

无法在没有对象的情况下调用成员函数“QString Load::loadRoundsPlayed()”

如果不创建类的实例,则不能调用非静态的成员函数


查看您的代码,您可能需要执行以下操作:

Load load;
ui->roundPlayer_lcdNumber->display(load.loadRoundsPlayed()); //right here
还有两种选择:

  • 如果不希望将它们与具体实例或实例关联,请将
    loadRoundsPlayed
    设置为static和
    roundsPlayed
    static
  • 使
    loadRoundsPlayed
    static并通过复制返回
    QString
    ,这将在函数内部本地创建。差不多
:


由于该方法和成员与类实例不关联,请将其设为静态:

class Load
{
private:
    static QString roundsPlayed;
public:
    Load();
    static QString loadRoundsPlayed();
};

如果希望它们与实例关联,则需要创建一个对象并调用该对象上的方法(在本例中,它不必是
静态的

因为方法和成员与类实例不关联,所以将其设为静态:

class Load
{
private:
    static QString roundsPlayed;
public:
    Load();
    static QString loadRoundsPlayed();
};

如果希望它们与实例关联,则需要创建一个对象并调用该对象上的方法(在这种情况下,它不必是
静态的

加载::loadRoundsPlayed()
中,应该更改

Load::roundsPlayed = roundsFile.readAll();

或者干脆

roundsPlayed = roundsFile.readAll();
这个特定的示例不会修复编译器错误,但它说明了您对语法的一些混淆。当您在函数或变量名前面加上“Load::”前缀时,表示您需要属于此类的字段。但是,类的每个对象都有自己的变量副本,您在其中声明了这些变量。这意味着您需要先创建对象,然后才能使用它们。类似地,函数被绑定到对象,因此您再次需要一个对象来调用成员函数


另一个选项是使函数
静态
,这样就不需要对象来调用它。我强烈建议您了解类的实例函数和静态函数之间的区别,以便在情况需要时适当地使用这两种工具。

Load::loadRoundsPlayed()
中,您应该更改

Load::roundsPlayed = roundsFile.readAll();

或者干脆

roundsPlayed = roundsFile.readAll();
这个特定的示例不会修复编译器错误,但它说明了您对语法的一些混淆。当您在函数或变量名前面加上“Load::”前缀时,表示您需要属于此类的字段。但是,类的每个对象都有自己的变量副本,您在其中声明了这些变量。这意味着您需要先创建对象,然后才能使用它们。类似地,函数被绑定到对象,因此您再次需要一个对象来调用成员函数

另一个选项是使函数
静态
,这样就不需要对象来调用它。我强烈建议您了解类的实例函数和静态函数之间的区别,以便在情况需要时适当地使用这两种工具