直接从另一个类C ++使用对象

时间:2018-12-02 03:43:37

标签: c++ c++11

嗨,我有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"问题是我不想将其声明为静态。有什么办法吗?

1 个答案:

答案 0 :(得分:0)

我不能肯定地说range(),但是secondscreen.h没有引用MainWindow::NetworkConnectionObject"类的特定实例,您必须引用特定的实例才能进行修改。


如果您的MainWindow标头中有类似

SecondScreen

然后在class SecondScreen { // . . . MainWindow window; // . . . } 的构造函数中,必须使用SecondScreen的初始化实例,即

MainWindow