2012-09-21 127 views
0

我其實不知道你是否可以聲明一個類,然後在同一個類的幾個對象中使用一個靜態實例。更具體地說:類的靜態對象?

class State { 
    public: 
     State(); 
     static CustomNumberDist normal_dist; 
    private: 
     int id; 
}; 

因此,每個州的實例應包含相同的CustomNumberDist實例。我編譯,但我想知道它是否有效,或者稍後我可能遇到問題。

+1

這是有效的但不確定的問題。 – Mahesh

+1

沒有'State'的實例將包含* CustomNumberDist的實例;將會有一個與'State'類關聯的'CustomNumberDist'實例。 –

回答

6

聲明(頭文件即.h)中是非常有效的。

但是在定義(.cpp文件),你需要

State::CustomNumberDist normal_dist; 

隨着內存將需要的靜態對象,當你到鏈接的階段。

0

它無效。它應該是這樣的:

class X 
{ 
public: 
     int normalValue = 5; //NSDMI 
     static int i; 
}; 

int X::i = 0; 

i需要在內存中的一個位置。在不涉及具體對象的記憶中。

更多信息可以在這裏找到:你給

Static Data Member Initialization

+1

這是不是有效? – delnan

+0

@delnan在OP的代碼中,'normal_dist'沒有被初始化。它只是宣佈。它的構造函數需要被調用,並且代碼將不會**調用它。 –

+0

「NSDMI」是什麼意思?另外,你應該提到非靜態成員的類內初始化(就像你使用'normalValue'一樣)只能在2011年以後纔有效;或者只是刪除'normalValue',因爲它與問題無關。 –