專案中的錯誤 類靜態成員初始化

2021-05-22 08:46:55 字數 618 閱讀 1430

在專案中碰到乙個類的靜態成員初始化的問題,大概如下:原因編譯器已經給出來了,a沒有定義。查資料,發現類的靜態成員只能在類的外部定義,不能在類的內部定義。如果要和普通成員一樣,在類的內部去定義static變數,那麼類的每乙個物件就擁有乙個屬於自己的變數,這樣就違反static的語意了。所以需要在類的外部定義int a::a;在標頭檔案中的僅僅是宣告,沒有分配記憶體空間。

還有一種情況,const static成員:就像第7行那樣,如果初始化式是乙個常量表示式,那麼const static成員可以在類的定義體中定義。c++ primer4中說到:const static成員在類的定義體中初始化時,該資料成員仍必須在類的體外進行定義。如第12行。但是我把該行注釋掉,用gcc編譯仍然能成功。

總結一下:

1.static成員:必須在類定義體外定義。不一定要初始化,不初始化則初始值為0。

2.const成員:必須在建構函式初始化列表內初始化。

3.static const成員:可以在類內宣告的時候初始化,如static const int a = 4;也可以在類體外初始化,如:const int a::a = 4.

有關類的靜態成員初始化

有四個檔案 class.h,class.cpp,fun.h,fun.cpp 1.第一種情況 class.h include class c class.cpp include class.h int main class.h 5 error iso c forbids in class initia...

類成員初始化

在類內部 初始化的順序 靜態的成員變數 普通的成員變數 構造器的呼叫。在派生類中 初始化的順序 呼叫基類的構造器 按宣告順序呼叫成員的初始化方法 呼叫派生類構造器主體 大多數類的初始化都是按照這些順序結合在一起的。下面是乙個例子 public class test extends sub publi...

類成員初始化

一 預設呼叫的無參建構函式 include include using namespace std class studentid class student int main 8 91011class student 20 2122 intmain 執行結果 重新設計建構函式,對s物件進行初始化,...