• 7564阅读
  • 3回复

预声明和包含头文件的问题 [复制链接]

上一主题 下一主题
离线weilong122
 

只看楼主 倒序阅读 楼主  发表于: 2006-04-26
这是一个头文件
#ifndef SENDER_H
#define SENDER_H

#include <QDialog>
#include <QFileDialog>

//class QLabel;
class QPushButton;
class QTimer;
class QUdpSocket;
class QTextEdit;
class QString;
class QFile;
//class QFileDialog

class Sender : public QDialog
{
  Q_OBJECT

public:
  Sender(QWidget *parent = 0);

//public signals:
 

private slots:
  void startBroadcasting();
  void broadcastDatagram();
  void openFile();

private:
  //QLabel *statusLabel;
  QPushButton *startButton;
  QPushButton *quitButton;
  QPushButton *openButton;
  QUdpSocket *udpSocket;
  QTimer *timer;
  QTextEdit *showEdit;
  int messageNo;
};

#endif
================================================

当把#include <QFileDialog>注释掉
然后加上class QFileDialog
编译时报错sender.h:63: error: multiple types in one declaration
但如果在头文件中写#include <QFileDialog>
去掉class QFileDialog
编译可以通过
这是为什么呢?

我觉的QFileDialog和其它的如QPushButton.     QString都是等价类
那么既然QPushButton.       QString可以预声明,那么QFileDialog也应该可以预声明
难道这里还有什么问题?
离线colrain
只看该作者 1楼 发表于: 2006-04-26
//class QFileDialog
是否忘加 ; 了呢
离线weilong122

只看该作者 2楼 发表于: 2006-04-26
还真是忘了
[ 此贴被weilong122在2006-04-26 17:11重新编辑 ]
离线guyansrg

只看该作者 3楼 发表于: 2006-04-26
可能不是这个地方的原因,单从错误提示上来看:一个声明有多种类型 。
如果你看一下QFileDialog头文件的内容就知道了
class QPushButton;
class QButton;
class QLabel;
class QWidget;
class QFileDialog;
class QTimer;
class QNetworkOperation;
class QLineEdit;
class QListViewItem;
class QListBoxItem;
class QFileDialogPrivate;
class QFileDialogQFileListView;

在QFileDialog的头文件里,有class QFileDialog;
也就是说,QFileDialog可以预声明
快速回复
限100 字节
 
上一个 下一个