http://blog.sina.com.cn/s/blog_8e5c2c1901012pgu.html
在寫 標頭檔的時間 經常會
有一些 class QFile 等這類 看似 是聲明的東西..例如下面
#ifndef WINDOW_H
#define WINDOW_H
QT_BEGIN_NAMESPACE
class QTcpServer;
class QTcpSocket;
class QProgressBar;
class QLabel;
class QDialogButtonBox;
class QFile;
QT_END_NAMESPACE
//code end
class QAction;
class QCheckBox;
...
如果沒有 聲明 將會 出現類似下面的錯誤
ISO C++ forbids declaration of 'QFile' with no type
那麼 這個是做什麼用的呢????
是因為在標頭檔裡面只有這些類的指標申明,並沒有真正執行個體化,在這個標頭檔對應的cpp檔案裡面應該會
#include < QDialogButtonBox >
#include < QFile >
在cpp檔案裡面才會正真執行個體化這些類。
其 實直接在標頭檔裡面#include < QDialogButtonBox> #include< QFile>也是可以的,像它這樣做,好像是可以降低各個檔案編譯時間的關聯度,不會在改動了一下部分類的時候,引發其他大量檔案的重新編譯,在做小工程的時候沒什麼區別,但是做大了,編譯一次需要好幾個小時的時候,這樣做的優勢就顯現出來了
class 類名只是聲明存在這麼一個類,但是通過這個聲明無法得到任何關於此類的具體資訊。這樣你可以在其他使用到的地方聲明一個該類型的指標。
include標頭檔則是將整個該標頭檔與使用到的地方關聯起來。
使用class 類名一般是為了去除編譯依賴,減少編譯消耗的時
#include "xx.h" 在編譯的時候把xx.h檔案直接展開,所以裡面的介面都能用,可以申明對象。但是class xx;這種方式就不會,你只能使用它的指標或者引用,你不能建立申明對象。