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

C2143: syntax error : missing ';' before '*'

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

以下代码位引发错误。我不知道为什么。有人能透露一些信息吗?所有代码都在不同的文件中。

#ifndef MAINSESSION_H
#define MAINSESSION_H
#include "sessionsuper.h"
#include "mainwindow.h"
class MainSession : public SessionSuper
{
public:
    MainSession();
private:
};
#include "mainsession.h"
MainSession::MainSession()
{
}
#endif // MAINSESSION_H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "mainsession.h"
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
    MainSession *ms;   //Error here
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //ms=new MainSession(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}
#ifndef SESSIONSUPER_H
#define SESSIONSUPER_H
class SessionSuper
{
public:
    SessionSuper();
};
#endif // SESSIONSUPER_H
#include "sessionsuper.h"
SessionSuper::SessionSuper()
{
}

错误:

d: \qtsrc\untitled4\mainwindow.h:20:错误:C2143:语法错误:缺少";"在"*"之前

d: \qtsrc\untitled4\mainwindow.h:20:错误:C4430:缺少类型说明符-假定为int。注意:C++不支持默认的intd: \qtsrc\untitled4\mainwindow.h:20:错误:C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int

我使用Qt+msvc10.0编译器。

更新:-

#ifndef MAINSESSION_H
#define MAINSESSION_H
#include "sessionsuper.h"
#include "mainwindow.h"
class MainSession : public SessionSuper
{
public:
    MainSession(MainWindow*);
private:
MainWindow *mw;
};
#endif // MAINSESSION_H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "mainsession.h"
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
    MainSession *ms;
};
#endif // MAINWINDOW_H
#ifndef SESSIONSUPER_H
#define SESSIONSUPER_H
class SessionSuper
{
public:
    SessionSuper();
};
#endif // SESSIONSUPER_H
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
#include "mainsession.h"
MainSession::MainSession(MainWindow mss)
{
  mw=mss;
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //ms=new MainSession(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}
#include "sessionsuper.h"
SessionSuper::SessionSuper()
{
}

错误:-更多,但类型相同

您有循环include,转发声明MainSession类型来打破当前循环include问题。

在主窗口.h 中

//#include "mainsession.h" comment out this line
class MainSession;     // add forward declaration
class MainWindow : public QMainWindow
{
    //...
    MainSession *ms; //Error here.
};

我检查了你的代码,如下所示:

class MainWindow
{
public:
    explicit MainWindow();
    ~MainWindow();
private:
    Ui::MainWindow *ui;
    MainSession *ms;   //My error also here <- see this
};

请参阅我的代码中MainSession缺失的地方,并且我在该行中得到了相同的错误。希望它能有所帮助。MainSession定义可能由于文件丢失、文件未包含、范围问题(另一个命名空间)等原因而丢失。请检查这些。namespace Ui(不同)可能是问题所在。

使用观测器模型解决问题。

的完整演示

添加注释如果您想要上面代码的工作代码。

干杯!!!