为什么第一个包含的 class 被识别而第二个包含的 class 不被识别?
why the first included class is recognized but the second included class is not?
您好,我有 2 个 classes,名为 Search 和 Search2。当我将它们包含在 qt 的 mainwindow.h 中时,只有第一个包含的 class 被识别,而第二个则不被识别。换句话说,如果我先包含 search2.h,然后包含 search.h,它将无法识别搜索。这些是我的头文件。有人可以帮忙吗?
mainwndow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtGui/QWidget>
#include "ui_mainwindow.h"
#include "search.h"
#include <QString>
#include <QStringList>
#include <QThread>
#include "search2.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
QThread* thread1 ;
QThread* thread2 ;
Search* mySearch;
Search2* mySearch2;
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
float frequency;
QString freq ;
int flag;
signals:
private slots:
void on_pushButton_2_clicked();
void receive_from_object(QStringList);
void receive_from_object1(QStringList);
void receive_from_object2(QStringList);
void on_pushButton_3_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
search.h
#ifndef SEARCH_H
#define SEARCH_H
#include <QWidget>
#include <QObject>
#include <QMutex>
#include <QString>
#include <QStringList>
#include <QDebug>
#include <qtimer.h>
#include <QtConcurrentRun>
#include <QMessageBox>
#include <QThread>
#include <QMessageBox>
#include <QWaitCondition>
namespace Ui {
class Search;
}
class Search : public QWidget
{
Q_OBJECT
public:
explicit Search(QWidget *parent = 0);
void Input_param(float RFfreq);
~Search();
void requestWork();
void abort();
QStringList slist3;
QString freqLog;
double output_search[5] ;
private:
Ui::Search *ui;
bool _abort;
bool _working;
signals:
void transmit_to_gui(QStringList);
void finished();
void workRequested();
void frequencyFound(QStringList);
void frequencyLog(QString) ;
void finishedscan() ;
public slots:
void receiveDateBand(QString);
};
#endif // SEARCH_H
search2.h
#ifndef SEARCH_H
#define SEARCH_H
#include <QWidget>
#include <QObject>
#include <QMutex>
#include <QString>
#include <QStringList>
#include <QDebug>
#include <qtimer.h>
#include <QtConcurrentRun>
#include <QMessageBox>
#include <QThread>
#include <QMessageBox>
#include <QWaitCondition>
namespace Ui {
class Search2;
}
class Search2 : public QWidget
{
Q_OBJECT
public:
explicit Search2(QWidget *parent = 0);
~Search2();
void requestWork2();
void abort2();
QStringList slist3;
QString freqLog;
double output_search[5] ;
private:
Ui::Search2 *ui;
bool _abort;
bool _working;
//QMutex mutex;
signals:
void transmit_to_gui1(QStringList);
void transmit_to_gui2(QStringList);
void finished2();
void workRequested2();
void frequencyFound(QStringList);
void frequencyLog(QString) ;
void finishedscan2() ;
public slots:
void receiveDateBand2(QString) ;
};
#endif // SEARCH_H
提前致谢。
现在非常确定这是否是原因,但在您的第二个 class 中您添加了相同的 header 定义:
#ifndef SEARCH_H instead of #ifndef SEARCH2_H
您好,我有 2 个 classes,名为 Search 和 Search2。当我将它们包含在 qt 的 mainwindow.h 中时,只有第一个包含的 class 被识别,而第二个则不被识别。换句话说,如果我先包含 search2.h,然后包含 search.h,它将无法识别搜索。这些是我的头文件。有人可以帮忙吗?
mainwndow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtGui/QWidget>
#include "ui_mainwindow.h"
#include "search.h"
#include <QString>
#include <QStringList>
#include <QThread>
#include "search2.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
QThread* thread1 ;
QThread* thread2 ;
Search* mySearch;
Search2* mySearch2;
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
float frequency;
QString freq ;
int flag;
signals:
private slots:
void on_pushButton_2_clicked();
void receive_from_object(QStringList);
void receive_from_object1(QStringList);
void receive_from_object2(QStringList);
void on_pushButton_3_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
search.h
#ifndef SEARCH_H
#define SEARCH_H
#include <QWidget>
#include <QObject>
#include <QMutex>
#include <QString>
#include <QStringList>
#include <QDebug>
#include <qtimer.h>
#include <QtConcurrentRun>
#include <QMessageBox>
#include <QThread>
#include <QMessageBox>
#include <QWaitCondition>
namespace Ui {
class Search;
}
class Search : public QWidget
{
Q_OBJECT
public:
explicit Search(QWidget *parent = 0);
void Input_param(float RFfreq);
~Search();
void requestWork();
void abort();
QStringList slist3;
QString freqLog;
double output_search[5] ;
private:
Ui::Search *ui;
bool _abort;
bool _working;
signals:
void transmit_to_gui(QStringList);
void finished();
void workRequested();
void frequencyFound(QStringList);
void frequencyLog(QString) ;
void finishedscan() ;
public slots:
void receiveDateBand(QString);
};
#endif // SEARCH_H
search2.h
#ifndef SEARCH_H
#define SEARCH_H
#include <QWidget>
#include <QObject>
#include <QMutex>
#include <QString>
#include <QStringList>
#include <QDebug>
#include <qtimer.h>
#include <QtConcurrentRun>
#include <QMessageBox>
#include <QThread>
#include <QMessageBox>
#include <QWaitCondition>
namespace Ui {
class Search2;
}
class Search2 : public QWidget
{
Q_OBJECT
public:
explicit Search2(QWidget *parent = 0);
~Search2();
void requestWork2();
void abort2();
QStringList slist3;
QString freqLog;
double output_search[5] ;
private:
Ui::Search2 *ui;
bool _abort;
bool _working;
//QMutex mutex;
signals:
void transmit_to_gui1(QStringList);
void transmit_to_gui2(QStringList);
void finished2();
void workRequested2();
void frequencyFound(QStringList);
void frequencyLog(QString) ;
void finishedscan2() ;
public slots:
void receiveDateBand2(QString) ;
};
#endif // SEARCH_H
提前致谢。
现在非常确定这是否是原因,但在您的第二个 class 中您添加了相同的 header 定义:
#ifndef SEARCH_H instead of #ifndef SEARCH2_H