宣告和定義 (C++)
宣告告訴編譯器的程式項目或名稱存在。 定義指定何種程式碼或資料名稱所說明。 必須宣告的名稱,才能使用它。
Declarations
宣告會引入程式中的一個或多個名稱。 在程式中,宣告可以出現一次以上。 因此,類別、 結構、 列舉型別,而且其他使用者定義的型別可以宣告為每個編譯單位。 在此多個宣告的條件約束是所有的宣告必須相同。 宣告也會成為定義,但是下列情況除外宣告:
為函式原型 (與任何函式主體的函式宣告)。
包含extern規範,但沒有初始設定式 (物件和變數) 或函式主體 (函式)。 這表示定義目前轉譯單位中並不一定,並提供名稱的外部連結。
屬於類別宣告中的靜態資料成員。
由於靜態類別資料成員是共用的所有類別物件的不連續變數,它們必須定義並初始化類別宣告之外。 (如需有關類別和類別成員的詳細資訊,請參閱類別。)
是一個類別名稱宣告與沒有下列的定義,例如class T;。
是typedef陳述式。
同時也是定義宣告的範例 ︰
// Declare and define int variables i and j.
int i;
int j = 10;
// Declare enumeration suits.
enum suits { Spades = 1, Clubs, Hearts, Diamonds };
// Declare class CheckBox.
class CheckBox : public Control
{
public:
Boolean IsChecked();
virtual int ChangeState() = 0;
};
部分是未定義的宣告如下:
extern int i;
char *strchr( const char *Str, const char Target );
定義
定義為唯一的規格的物件或變數、 函式、 類別或列舉值。 因為定義都必須是唯一的所以程式可以包含只有一個給定的程式項目的定義。 可以有多對一之間的對應宣告和定義。 有兩種情況下,在其中的程式項目可以宣告和未定義:
函式宣告,但永遠不會有一個函式呼叫或參考所需的函式的位址的運算式。
類別只能用於不需要知道其定義的方法。 不過,您必須宣告類別。 下列程式碼說明了這種情況:
// definitions.cpp class WindowCounter; // Forward reference; no definition class Window { // Definition of WindowCounter not required static WindowCounter windowCounter; }; int main() { }