首页 > 解决方案 > 直接从另一个类 c++ 使用对象

问题描述

嗨,我有 3 个要使用的课程。但我不想多次创建一个类的对象。我直接想使用在第二类中声明和初始化的一个类的对象(在第三类中)。

要了解问题,请关注下面示例中定义的 NetworkConnection 成员和类。

类主窗口标题

#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

现在我想直接在SeconScreenclass 中使用Networkclassobject,这样我就可以访问MainWindowInstance 的LogInToken Member。

#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"问题是我不想声明它是静态的。有没有办法做到这一点。

标签: c++c++11

解决方案


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


如果在你的SecondScreen标题中你有类似的东西

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

然后在您的构造函数中,SecondScreen您必须使用的初始化实例MainWindow,即

SecondScreen::SecondScreen(QWidget* parent) : QDialog(parent) {
  window.NetworkConnectionObject->LogInToken = "";
}

推荐阅读