invalid use of member 'MainWindow::account' in static member function
Qt. Из одного файла передаю объект класса в другой файл. Вод код mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMessageBox>
#include <string>
#include <QDebug>
#include "mainmenu.h" // для создания объекта окна mainmenu чтобы переходить в это окно
using namespace std;
class RegData;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
RegData *account; // для передачи в другое окно
~MainWindow();
private slots:
void on_button_reg_clicked();
void on_button_log_clicked();
private:
Ui::MainWindow *ui;
Mainmenu *second;
};
class RegData
{
private:
QString login;
QString email;
QString password;
public:
RegData(QString log = "", QString mail = "", QString pass = "") : login(log), email(mail), password(pass)
{
}
RegData(const RegData& src) :
login(src.login), email(src.email), password(src.password)
{
}
void cpy(const RegData& from)
{
login = from.login;
email = from.email;
password = from.password;
}
void output()
{
qDebug() << login<<email<<password;
}
QString getLogin()
{
return login;
}
QString getEmail()
{
return email;
}
QString getPassword()
{
return password;
}
void setLogin(const QString log)
{
login = log;
}
void setEmail(const QString mail)
{
email = mail;
}
void setPassword(const QString pass)
{
password = pass;
}
};
#endif // MAINWINDOW_H
Передавать файл мне нужно в mainmenu.cpp, вот он:
#include "mainmenu.h"
#include "ui_mainmenu.h"
#include "mainwindow.h"
Mainmenu::Mainmenu(QWidget *parent) :
QDialog(parent),
ui(new Ui::Mainmenu)
{
ui->setupUi(this);
}
Mainmenu::~Mainmenu()
{
delete ui;
}
void Mainmenu::on_plus_clicked()
{
QString name = MainWindow::account->getLogin(); // здесь ошибка
ui->label->setText(name);
}
В mainwindow.cpp я присваиваю значения для передаваемого объекта путем копирования через функцию (в классе) "cpy". Где ошибка я написал выше в комментарии к коду, а вот сама ошибка:
C:\Users\david\Documents\Carsharring_files\mainmenu.cpp:19: ошибка: invalid use of non-static data member 'MainWindow::account' QString name = MainWindow::account->getLogin(); ^
Если написать
static RegData *account;
выводит
mainwindow.cpp167: ошибка: undefined reference to `MainWindow::account'
в указанной строке присваивание (копирование функция) account->cpy(*it);
Надеюсь на помощь.
Ответы (1 шт):
У вас ошибка буквально означает то, что вы делаете неправильно. Ваш класс MainWindow содержит поле public: RegData *account, но оно не является статическим членом класса. Не статические члены существуют только внутри объекта класса и к ним невозможно получить доступ не обращаясь к объекту. Обращение через MainWindow::account подразумевает, что это поле должно быть статическим, то есть объявление должно выглядеть так:
static RegData *account;
Но вообще старайтесь избегать использования public полей, это нарушает принцип инкапсуляции и делает код запутаннее. Поэтому, если возможно, лучше передавать объект, к полю которого будет идти обращение.
Также, поскольку Вы используете Qt, то для передачи данных между объектами можете использовать механизм слотов и сигналов.
Также, поскольку идёт работа с указателем, то необходимо выделить память, а в конце работы её очистить. То есть перед использованием поля account необходимо выделить место под объект класса RegData: MainWindow::account = new RegData();. А в конце программы сделать delete MainWindow::account;. Также существуют умные указатели, которые избавляют от вопроса уборки памяти.