为什么第一个包含的 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