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

时间:2019-01-05 09:08:49

标签: c++ qt

我的mainwindow类中有一个结构:

#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

我通过单击mainwindow.cpp将其设置为btn1中的成员:

MainWindow::properties MainWindow::ret_func()
{
  return _properties;
}

void MainWindow::on_btn1_clicked()
{
  _properties.ID = ui->lineEdit->text().toInt();
  qDebug()<<_properties.ID;
  _dialog->exec();
}

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

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

错误:

error: cannot call member function 'MainWindow::properties 
MainWindow::ret_func()' without object
 qDebug()<<MainWindow::ret_func().ID;
                                ^

我已阅读一些有类似问题的线程,但找不到解决方案 请帮助我

1 个答案:

答案 0 :(得分:2)

MainWindow::ret_func()不是静态成员,这就是为什么编译器会显示错误:无法在没有对象的情况下调用成员函数.em的原因

您需要具有 MainWindow 的实例才能在其上应用ret_fun

如果只有一个 MainWindow ,则可以将该类修改为 singleton ,从而能够执行MainWindow::instance().ret_func().ID;MainWindow::ret_func().ID;