2013-12-08 86 views
0

到目前爲止,我已經使用DEFINE來聲明我的常量。它工作得很好。C++常量如何使它們工作

我想用我的類C++ const關鍵字,但它給編譯時錯誤

頁眉

class User{ 

    public: 
    User::User(); 
    protected: 
     const float DATA_Z; 

    } 

.CPP

User::User(){ 

     DATA_Z = 0.0023f; 

    } 

這是它產生

錯誤

錯誤3錯誤C2758:'User :: DATA_Z':必須在construc中初始化tor基礎/成員初始值列表

我該如何爲其分配數據,以及如何在課堂上使用它們。

+1

該錯誤已經說明你必須做什麼。把它放在初始化列表中。 –

回答

5

你想這樣做,而不是:

User::User() : DATA_Z(0.0023f) 
{ 
    // body of constructor 
} 

恆成員需要在初始化列表中進行初始化,因爲它們不能被直接分配。對於引用類型的成員也是如此,因爲您不能更改引用變量的引用。

5

錯誤信息非常清楚。將分配到初始化列表:

User::User(): DATA_Z(0.0023f) 
{ 

} 
1

下面的代碼可以幫助你傳遞任何值初始化DATA_Z:與#define定義

` 
    class User{ 
     public: 
      User::User(float data=0):DATA_Z(data){}; // here `data` is a local parameter to receive   the assigned value. 
     protected: 
      const float DATA_Z; 
    } 
` 
+0

有兩個問題,一個是他不想傳入常量的值,只是在頭文件中指定它。其次,你正在從一個int參數初始化DATA_Z(一個浮點數)。 –

2

只是簡單的更換清單常數,寫入全球const S:

#define DATA_Z 0.0023f 

成爲

const float DATA_Z = 0.0023f; 

把公司nstants進入類意味着你可以在每個對象中有不同的值,這就是爲什麼其他答案會告訴你在構造函數中初始化它。這是一個合法的設計決策,但它的不同於將該值定義爲宏。

相關問題