RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1425521
Accepted
Nedaxses
Nedaxses
Asked:2022-08-31 00:06:36 +0000 UTC2022-08-31 00:06:36 +0000 UTC 2022-08-31 00:06:36 +0000 UTC

在静态成员函数中无效使用成员“MainWindow::account”

  • 772

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);

希望得到帮助。

c++ qt
  • 1 1 个回答
  • 22 Views

1 个回答

  • Voted
  1. Best Answer
    V31R
    2022-08-31T00:50:09Z2022-08-31T00:50:09Z

    你有一个错误字面意思是你做错了什么。您的类MainWindow包含一个 field public: RegData *account,但它不是该类的静态成员。非静态成员只存在于类对象内部,不访问对象就无法访问。引用 viaMainWindow::account意味着该字段必须是静态的,即声明必须如下所示:

    static RegData *account;
    

    但总的来说,尽量避免使用公共字段,它违反了封装原则,使代码更加混乱。因此,如果可能,最好传递一个将访问其字段的对象。

    此外,由于您使用的是 Qt,因此您可以使用插槽和信号的机制在对象之间传输数据。

    此外,由于指针的工作正在进行中,因此有必要分配内存,并在工作结束时将其清除。也就是说,在使用 field 之前account,您必须为 RegData: class 的对象分配空间MainWindow::account = new RegData();。并在程序结束时执行delete MainWindow::account;. 还有一些智能指针可以消除内存清理的问题。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5