嗨,我有3个要使用的类。但我不想一次创建一个类的对象。我直接想使用在第二个类中声明和初始化的一个类的对象(在第三类中)。
要了解该问题,请重点关注下面示例中定义的NetworkConnection成员和类。
Mainwindow类头
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "secondscreen.h"
#include "networkconnection.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
NetworkConnection *NetworkConnectionObject;
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
SecondScreen* SecondScreenObject;
};
#endif // MAINWINDOW_H
Class Main Window cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QMessageBox"
#include "networkconnection.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
NetworkConnectionObject = new NetworkConnection();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
int Error = NetworkConnectionObject->Connect(Username,Password);
///////////////
// This Works
//////////////
NetworkConnectionObject->LogInToken = "";
}
NetworkConnection标头
#ifndef NETWORKCONNECTION_H
#define NETWORKCONNECTION_H
#include <QString>
class NetworkConnection
{
public:
NetworkConnection();
int Connect(QString Username, QString Passwd);
QString LogInToken;
};
#endif // NETWORKCONNECTION_H
现在,我想直接在SeconScreenclass中使用Networkclassobject,以便可以访问MainWindowInstance的LogInToken成员。
#include "secondscreen.h"
#include "ui_secondscreen.h"
#include "mainwindow.cpp"
SecondScreen::SecondScreen(QWidget *parent) :
QDialog(parent),
ui(new Ui::SecondScreen)
{
ui->setupUi(this);
///////////////
// This doesnot work
//////////////
MainWindow::NetworkConnectionObject->LogInToken = "";
}
SecondScreen::~SecondScreen()
{
delete ui;
}
但是,当我尝试这个编译器时说
Invalid use of non-static data member "MainWindow::NetworkConnectionObject"
问题是我不想将其声明为静态。有什么办法吗?
答案 0 :(得分:0)
我不能肯定地说range()
,但是secondscreen.h
没有引用MainWindow::NetworkConnectionObject"
类的特定实例,您必须引用特定的实例才能进行修改。
如果您的MainWindow
标头中有类似
SecondScreen
然后在class SecondScreen {
// . . .
MainWindow window;
// . . .
}
的构造函数中,必须使用SecondScreen
的初始化实例,即
MainWindow