Использование объекта напрямую из другого класса c ++ - PullRequest
0 голосов
/ 02 декабря 2018

Привет, у меня есть 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

Главное окно класса 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

Теперь я хочу использовать Networkclassobject непосредственно в SeconScreenclass, чтобы я могaccess LogInToken Член MainWindowInstance.

#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 голосов
/ 02 декабря 2018

Не видя secondscreen.h Я не могу сказать наверняка, но MainWindow::NetworkConnectionObject" не ссылается на конкретный экземпляр класса MainWindow, вы должны ссылаться на конкретный экземпляр для изменения.


Если в заголовке SecondScreen есть что-то вроде

class SecondScreen {
  // . . .
  MainWindow window;
  // . . .
}

, то в конструкторе для SecondScreen вы должны использовать инициализированный экземпляр MainWindow, т. Е.

SecondScreen::SecondScreen(QWidget* parent) : QDialog(parent) {
  window.NetworkConnectionObject->LogInToken = "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...