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

时间:2013-07-30 10:55:10

标签: c++ qt

以下一些代码抛出错误。我不知道为什么。任何人都能解释一下吗? 所有代码都在不同的文件中。

#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 ++不支持default-int   d:\ qtsrc \ untitled4 \ mainwindow.h:20:错误:C4430:缺少类型   说明符 - 假设为int。注意:C ++不支持default-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()
{
}

错误: - 更多但类型相同

3 个答案:

答案 0 :(得分:5)

你有循环包含,前向声明MainSession类型来打破当前的圆圈包含问题。

在MainWindow.h中

//#include "mainsession.h" comment out this line

class MainSession;     // add forward declaration
class MainWindow : public QMainWindow
{
    //...
    MainSession *ms; //Error here.
};

答案 1 :(得分:0)

我已经检查了你的代码:

class MainWindow
{
public:
    explicit MainWindow();
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    MainSession *ms;   //My error also here <- see this
};

在我的代码中看到MainSession缺少的地方,我在行中遇到了同样的错误。希望它会有所帮助。由于文件丢失,文件未包含,范围问题(另一个命名空间)等,MainSession定义可能会丢失。请检查这些。 namespace Ui(不同)可能是问题。

答案 2 :(得分:0)

使用观察者模型解决了问题。

完整演示Here

添加评论如果您需要上述代码的工作代码。

干杯!!!