Qt。从一个文件中,我将类对象传输到另一个文件。点播主窗口.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: 错误:无效使用非静态数据成员 'MainWindow::account' QString name = MainWindow::account->getLogin(); ^
如果你写
static RegData *account;
显示
mainwindow.cpp167:错误:未定义对“MainWindow::account”的引用
在指定行赋值(复制函数)account->cpy(*it);
希望得到帮助。
你有一个错误字面意思是你做错了什么。您的类
MainWindow包含一个 fieldpublic: RegData *account,但它不是该类的静态成员。非静态成员只存在于类对象内部,不访问对象就无法访问。引用 viaMainWindow::account意味着该字段必须是静态的,即声明必须如下所示:但总的来说,尽量避免使用公共字段,它违反了封装原则,使代码更加混乱。因此,如果可能,最好传递一个将访问其字段的对象。
此外,由于您使用的是 Qt,因此您可以使用插槽和信号的机制在对象之间传输数据。
此外,由于指针的工作正在进行中,因此有必要分配内存,并在工作结束时将其清除。也就是说,在使用 field 之前
account,您必须为 RegData: class 的对象分配空间MainWindow::account = new RegData();。并在程序结束时执行delete MainWindow::account;. 还有一些智能指针可以消除内存清理的问题。