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
还有两种选择:
- 如果不希望将它们与具体实例或实例关联,请将
设置为static和loadRoundsPlayed
staticroundsPlayed
- 使
static并通过复制返回loadRoundsPlayed
,这将在函数内部本地创建。差不多QString
错误描述非常清楚 无法在没有对象的情况下调用成员函数“QString Load::loadRoundsPlayed()” 如果不创建类的实例,则不能调用非静态的成员函数
查看您的代码,您可能需要执行以下操作:
Load load;
ui->roundPlayer_lcdNumber->display(load.loadRoundsPlayed()); //right here
还有两种选择:
- 如果不希望将它们与具体实例或实例关联,请将
设置为static和loadRoundsPlayed
staticroundsPlayed
- 使
static并通过复制返回loadRoundsPlayed
,这将在函数内部本地创建。差不多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::”前缀时,表示您需要属于此类的字段。但是,类的每个对象都有自己的变量副本,您在其中声明了这些变量。这意味着您需要先创建对象,然后才能使用它们。类似地,函数被绑定到对象,因此您再次需要一个对象来调用成员函数
另一个选项是使函数静态
,这样就不需要对象来调用它。我强烈建议您了解类的实例函数和静态函数之间的区别,以便在情况需要时适当地使用这两种工具