以下一些代码抛出错误。我不知道为什么。任何人都能解释一下吗? 所有代码都在不同的文件中。
#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()
{
}
错误: - 更多但类型相同
答案 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)