我的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;
^
我已阅读一些有类似问题的线程,但找不到解决方案 请帮助我
答案 0 :(得分:2)
MainWindow::ret_func()
不是静态成员,这就是为什么编译器会显示错误:无法在没有对象的情况下调用成员函数.em的原因
您需要具有 MainWindow 的实例才能在其上应用ret_fun
。
如果只有一个 MainWindow ,则可以将该类修改为 singleton ,从而能够执行MainWindow::instance().ret_func().ID;MainWindow::ret_func().ID;