Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从另一个类读取结构成员_C++_Qt - Fatal编程技术网

C++ 如何从另一个类读取结构成员

C++ 如何从另一个类读取结构成员,c++,qt,C++,Qt,我的主窗口类中有一个结构: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include "dialog.h" #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0

我的主窗口类中有一个结构:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "dialog.h"
#include <QMainWindow>

namespace Ui {
  class MainWindow;
}

class MainWindow : public QMainWindow
{
  Q_OBJECT

  public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    struct properties{
      int ID = -1;
    };

    properties ret_func();
  private slots:
    void on_btn1_clicked();

  private:
    Ui::MainWindow *ui;
    properties _properties;
    Dialog *_dialog;
};

#endif // MAINWINDOW_H
单击btn1会打开另一个窗口,我想通过单击btn2读取结构成员值。这是我的代码:

void Dialog::on_btn2_clicked()
{
    qDebug()<<MainWindow::ret_func().ID;//->this line has error
}
错误:

错误:无法调用成员函数“MainWindow::properties” 主窗口::ret_func'无对象 qDebugMainWindow::ret_funcy不是静态成员,这就是编译器显示错误的原因:无法调用成员函数。。毫无目的

您需要有MainWindow的实例才能对其应用ret_Fun


如果只有一个MainWindow,则可以将该类修改为singleton,以便能够执行MainWindow::instance.ret_func.ID;主窗口::ret_func.ID

欢迎来到堆栈溢出!作为一个新用户,请接受并阅读。关于你的问题,读者需要过滤的信息太多,这让你的问题变得糟糕。在这里发布之前,请从您的代码中提取a!谢谢你的回复。但你的回答让我更加困惑。我是个新手,不知道什么是单身!在网上搜索但无法理解。你能编辑我的代码吗?我英语不好也是另一个原因。singleton是一个只有一个实例的类,而静态成员通常命名为instance并返回该实例。但是我不知道你有多少个MainWindow实例,如果它可以是一个单例,那么没有其他方法了?有可能让“MainWindow::ret_func”成为一个静态成员来消除错误吗?@rezamoslemi你也可以在你的类对话框中添加一个方法,给它一个MainWindow::on_btn1_单击的实例,例如执行Dialog->setWindowthis;在_dialog->exec;之前;。但坦率地说,你的做法在全球范围内是非常重要的strange@rezamoslemi如果“MainWindow::ret_func”是静态的,则无法访问非静态成员,只需推送问题
void Dialog::on_btn2_clicked()
{
    qDebug()<<MainWindow::ret_func().ID;//->this line has error
}