我知道这个话题已经讨论过了,但是我花了半天的时间才弄清楚我做错了什么。我一直遇到这个错误,我想我已经完成了数千个语法检查。谁能帮我?

#ifndef ADDEDITDIALOG_H
#define ADDEDITDIALOG_H

#include <QDialog>
#include <QStandardItemModel>
#include "characteristics.h"
#include "equipment.h"
#include "generaldata.h"
#include "registration.h"
#include "revisiondialog.h"
#include "vehicle.h"
#include "vehiclehelper.h"
#include "verification.h"
#include "verificationdialog.h"


namespace Ui {
class AddEditDialog;
}

class AddEditDialog : public QDialog
{
Q_OBJECT

public:
explicit AddEditDialog(QWidget *parent = 0);
~AddEditDialog();

bool getIsNew() const;
bool getIsEdited() const;
bool getAddRevision() const;

Vehicle getVehicleToAdd() const;

void setVehicleToAdd();
void loadVehicleToEdit(Vehicle car);
void createTableView(const QList<Verification> list);

QList<Verification> getRevisionsList() const;

private slots:
void on_add_revision_clicked();

void on_save_clicked();

void on_cancel_clicked();

void on_generate_reg_number_clicked();

private:
Ui::AddEditDialog *ui;
RevisionDialog *newDialog; //this line is giving the error

Vehicle toAdd;

bool isNew;
bool isEdited;
bool addRevision;

QList<Verification> newVerificationList;
QStandardItemModel *newModel;
};

#endif // ADDEDITDIALOG_H

版本对话框
#ifndef REVISIONDIALOG_H
#define REVISIONDIALOG_H

#include <QDialog>
#include "addeditdialog.h"
#include "verification.h"

namespace Ui {
class RevisionDialog;
}

class RevisionDialog : public QDialog
{
Q_OBJECT

public:
explicit RevisionDialog(QWidget *parent = 0);
~RevisionDialog();

void setRevision();
void setRevisionsList();
Verification getRevision() const;
bool getOk() const;

private slots:
void on_ok_revision_clicked();

void on_cancel_revision_clicked();

private:
Ui::RevisionDialog *ui;
QList<Verification> revisionsList;
Verification revision;
bool okClicked;
};

#endif // REVISIONDIALOG_H

最佳答案

RevisionDialog是未定义的类型。

我看到你包括

#include "revisiondialog.h"

在顶部,它应该定义了RevisionDialog

但是,显然您设法创建了一个循环包含依赖关系,这意味着revisiondialog.h也直接或间接包含了addeditdialog.h(如果产生错误的 header 名称)。

包含防护破坏了包含循环,导致一个圆形的 header 在物理上首先被包含,另一个在物理上被包含。在您的情况下,首先包含了addeditdialog.h,这就是为什么它对revisiondialog.h的内容一无所知的原因。

摆脱循环包含依赖。除非您这样做,否则别无所求。

P.S. 现在,当您发布revisiondialog.h的内容时,很明显它还包含addeditdialog.h。这是你的问题。

为什么您的revisiondialog.h包括addeditdialog.h?有什么需要?

10-04 11:47