Qt C++ C2143:语法错误:'*'之前缺少';'
Qt C++ C2143: syntax error : missing ';' before '*'
我知道这个话题已经讨论过了,但我花了半天时间来弄清楚我做错了什么。我一直有这个错误,我想我已经做了数千次语法检查。谁能帮我?
#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
当您在头文件中仅使用指针时,最好使用前向声明
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 使用基类指针调用基类的值构造函数的语法是什么?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++语法运算符功能?
- C++使用 rand 定义函数语法
- 什么文件可以修改 atom 的C++语法?
- 创建模板嵌套类实例的语法?
- C++语法差异:二维和一维数组(指针算术)
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么