我正在尝试解决这个问题,但我对前向声明的理解可能存在一些误解。
我遇到了以下错误:
我有这些文件(我省略了一些行和文件,只粘贴了相关代码):
algorithm.cpp
我遇到了以下错误:
src/algorithm.cpp: In constructor ‘Algorithm::Algorithm(MainWindow*)’:
src/algorithm.cpp:22:20: error: invalid use of incomplete type ‘struct Ui::MainWindow’
src/mainwindow.h:23:10: error: forward declaration of ‘struct Ui::MainWindow’
我有这些文件(我省略了一些行和文件,只粘贴了相关代码):
algorithm.cpp
#include "algorithm.h"
#include "mainwindow.h"
Algorithm::Algorithm(MainWindow *mainWindow)
{
this->mainWindow = mainWindow;
QAction *action = new QAction(this);
action->setObjectName(QStringLiteral("action"));
action->setText(this->getName());
mainWindow->m_ui->menuAlgorithms->addAction(action);
mainWindow->connect(action, SIGNAL(triggered()), this, SLOT(this->start()));
}
algorithm.h
#ifndef ALGORITHM_H
#define ALGORITHM_H
#include <QObject>
#include "graphwidget.h"
#include "edge.h"
#include "vertex.h"
class MainWindow;
class Algorithm : public QObject
{
public:
MainWindow *mainWindow;
Algorithm(MainWindow *mainWindow);
void start();
virtual void solve();
virtual QString getDescription();
virtual QString getName();
};
mainwindow.cpp
#include "mainwindow.h"
#include "algorithm.h"
#include "../ui/ui_mainwindow.h"
#include "vertex.h"
#include "edge.h"
#include "warning.h"
mode_type mode;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
m_ui(new Ui::MainWindow)
{
gundirected = NULL;
gdirected = NULL;
m_ui->setupUi(this);
...
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSystemTrayIcon>
#include <QSignalMapper>
#include <QUndoView>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QKeyEvent>
#include <QGraphicsSceneMouseEvent>
#include <QLabel>
#include <QVBoxLayout>
#include <QPushButton>
#include "graphwidget.h"
enum mode_type {NORMAL, VERTEX, EDGE}; // vyctovy typ pro urceni editoacniho modu
extern mode_type mode;
namespace Ui
{
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
Ui::MainWindow *m_ui;
...
.cpp
文件中的namespace UI { ... }
中,或者在所有的定义之前提供一个 using 语句和using UI::MainWindow;
。 - πάντα ῥεῖUi::MainWindow
与MainWindow
不同。Ui::MainWindow
类在ui_mainwindow.h
文件中声明。问题在于他试图在未包含ui_mainwindow.h
头文件的情况下从Algorithm
类中使用Ui::MainWindow
。 - thuga