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

Say*_*k88 5 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()
{
}
Run Code Online (Sandbox Code Playgroud)

错误:

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

错误: - 更多但相同类型

bil*_*llz 5

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

在MainWindow.h中

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

class MainSession;     // add forward declaration
class MainWindow : public QMainWindow
{
    //...
    MainSession *ms; //Error here.
};
Run Code Online (Sandbox Code Playgroud)


Say*_*k88 0

问题是通过使用观察者模型来解决的。

完整的演示在这里

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

干杯!!!