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

Qt C++ C2143: syntax error : missing ';' before '*'

本文关键字:C++ 语法 错误 Qt C2143      更新时间:2023-10-16

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

#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

修订对话框.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(如果这是产生错误的标头的名称)。

包含

防护装置打破了包含循环,导致一个圆形标头首先在物理上包含,另一个在物理上被包含,然后被物理包含。在您的情况下,addeditdialog.h首先被包括在内,这就是为什么它对revisiondialog.h的内容一无所知。

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

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

为什么你的revisiondialog.h包括addeditdialog.h?这有什么必要?

正如所说,您包含了不必要的头文件。我想对这个问题补充一些想法。

没有必要时,不要在 .h 文件中包含标头。

将它们移动到.cpp文件。您只需要QDialog,QStandardItemModel,车辆和验证,其余的可以移动到.cpp文件中。尽量减少循环包含依赖的可能性是一个好习惯

#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"

对于修订对话框,当您仅使用指向类的指针时,请使用提到的前向声明。

RevisionDialog *newDialog; // this is only pointer -> no need to include header file

前瞻申报:

namespace Ui {
    class AddEditDialog; // this is forward declaration within Ui namespace
}
class RevisionDialog; // added forward declaration for RevisionDialog *newDialog;
class AddEditDialog : public QDialog
{
Q_OBJECT

当您在头文件中仅使用指针时,最好使用前向声明