c++ - 直接从另一个类 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"
问题是我不想声明它是静态的。有没有办法做到这一点。
解决方案
没有看到secondscreen.h
我不能肯定地说但MainWindow::NetworkConnectionObject"
没有引用MainWindow
类的特定实例,您必须引用特定实例才能修改。
如果在你的SecondScreen
标题中你有类似的东西
class SecondScreen {
// . . .
MainWindow window;
// . . .
}
然后在您的构造函数中,SecondScreen
您必须使用的初始化实例MainWindow
,即
SecondScreen::SecondScreen(QWidget* parent) : QDialog(parent) {
window.NetworkConnectionObject->LogInToken = "";
}
推荐阅读
- html - 仅 CSS 手风琴布局
- javascript - Javascript 为什么标头脚本中的对象属性可以,但在 html 中未定义?
- react-native - 如何在 Connect 组件下的 graphql 查询中使用 $filter 变量?
- r - 根据唯一值有条件地将字符串更改为因子?
- javascript - Sequilize 在 where 子句中查找表的最高值
- c# - 如何在 Visual Studio 2019 中禁用关于 System.String 的浮动提示
- python - 模块已安装但导入 cartopy 时出错
- css - 我如何使用 flexbox 来实现它?
- selenium - 文件未在 Selenium 上使用 WebElement 上传
- latitude-longitude - MathNet 距离计算的单位是什么?