2012-01-08 104 views
3

我想做一個類,它有一個簡單的整數。當然,它使用頭文件和什麼。爲什麼在頭文件中聲明類聲明中的變量時出現錯誤?

下面的代碼:

class.h

class consolBuf 
{ 
private: 
    int buffersize1 = 10; //Data member initializer is not allowed 
    int buffersize2 = 10; 
    static char screenBuffer[10][10]; //screenBuffer 
public: 
    consolBuf(void); 
    ~consolBuf(void); 
    void draw(); 
    void write(int x, int y); 
    char get(int x, int y); 
}; 

出於某種原因,一些振振有辭的Visual Studio一直抱怨我不能宣佈在class.h一個整數。我到處搜索,找不到答案。有什麼我失蹤?

+0

誰告訴你它應該可能? – 2012-01-08 23:44:10

+0

@KerrekSB它應該是可能的,因爲當前的C++標準允許它。這是不可能的,因爲目前的C++標準是相當新的,據我所知,目前還沒有完整的實現。 – hvd 2012-01-08 23:45:56

回答

3

事實上,你不能初始化那樣的成員。如果你想初始化這些默認值,爲每個實例,你會做,在構造函數:

consolBuf::consolBuf() 
    : buffersize1(10) 
    , buffersize2(10) 
{ 

} 
+0

謝謝,這是我想要的,我需要變量的原因是因爲我希望人們能夠更改緩衝區大小。 – ILikePizza555 2012-01-08 23:51:16

3

在C++ 03中,只有靜態常量的值可以在類內定義。不過,似乎這就是你無論如何需要在你的情況是什麼:

class consolBuf 
{ 
private: 
    static int const buffersize1 = 10; //Data member initializer is now allowed 
    static int const buffersize2 = 10; 
    static char screenBuffer[buffersize1][buffersize2]; //screenBuffer 
public: 
    consolBuf(void); 
    ~consolBuf(void); 
    void draw(); 
    void write(int x, int y); 
    char get(int x, int y); 
}; 

注意,在C++ 11,你原來的代碼是允許的。因此,如果您的原始代碼真的是您想要的,您可能需要做的就是啓用C++ 11功能。在C++ 03中,您將不得不在構造函數中使用成員初始化器。

+0

好的,謝謝這將在稍後有用。 – ILikePizza555 2012-01-08 23:52:15

1

如果你想初始化固定值,申報buffersize1buffersize2static const。否則,如果您希望變量對於類的每個實例都是本地的,請在構造函數中初始化它們。

顯然C++ 0x/C++ 11允許你的上面的代碼,但我個人個人仍然喜歡實例變量在構造函數中一起初始化。