Qt C++ C2143:语法错误:缺少';' 在'*'之前

lau*_*ura 2 c++ qt

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

#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
Run Code Online (Sandbox Code Playgroud)

revisiondialog.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
Run Code Online (Sandbox Code Playgroud)

AnT*_*AnT 5

RevisionDialog 是一个未定义的类型.

我看到你包括了

#include "revisiondialog.h"
Run Code Online (Sandbox Code Playgroud)

在顶部,据说定义RevisionDialog.

但是,显然您设法创建了一个循环包含依赖项,这意味着您revisiondialog.haddeditdialog.h可以直接或间接地包含您的(如果是产生错误的标题的名称).

包含防护打破了包含周期,导致一个圆形头首先被物理包含在内,另一个实际包含在第二个中.在你的情况下addeditdialog.h首先包括在内,这就是为什么它对...的内容一无所知revisiondialog.h.

摆脱循环包含依赖.在你这样做之前,尝试其他任何东西都没有意义.

PS现在,当你发布revisiondialog.h它的内容显然它也包括addeditdialog.h.这是你的问题.

为什么revisiondialog.h包括你addeditdialog.h?有什么需要呢?

  • @Laszlo Papp:当数据类型*之间存在循环依赖*时,前向声明是一种解决方案.在这种情况下,根本没有循环依赖.`addedddialog.h`被包含在`revisiondialog.h`中,没有任何理由.要修复它,不需要任何前向声明.只需要删除完全不必要的`#include`指令. (2认同)