2012-01-08 17 views
3

私はそこに単純な整数を持つクラスを作ろうとしています。もちろん、ヘッダファイルとそれ以外のものを使用します。いくつかのreson Visual Studioは、私がclass.hの整数を宣言することができないことを不満を続け何らかの理由でヘッダー内のクラス宣言で変数を宣言するときにエラーが発生するのはなぜですか?

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); 
}; 

は、ここでは、コードです。私はどこからでも検索しましたが、私は答えを見つけることができません。私は行方不明のものがありますか?

+0

誰があなたに言ったのですか?**可能なはずですか? –

+0

@KerrekSB現在のC++標準で許可されているため、「可能」にする必要があります。現在のC++標準はかなり新しく、私の知る限り、この時点で完全な実装は存在しないので、これは不可能です。 – hvd

答えて

3

実際、そのようなメンバーを初期化することはできません。 C++ 03では

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

} 
+0

ありがとう、これは私が望んでいたものです。バッファサイズを変更できるようにするために変数が必要な理由があります。 – ILikePizza555

3

、唯一の静的定数値は、クラス内で定義することができます:あなたは、各インスタンスのデフォルト値として、それらを初期化したい場合は、コンストラクタでいることだろう。しかし、その後、あなたの場合には、とにかく必要なものであるようだ:C++ 11には、元のコードが許可されていることを

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++ 03では、代わりにコンストラクタでメンバのイニシャライザを使用する必要があります。

+0

さて、おかげされ、これは後で便利になるだろう。 – ILikePizza555

1

あなたは固定値を初期化したい場合は、static constとしてbuffersize1buffersize2を宣言。それ以外の場合、変数をクラスの各インスタンスに対してローカルにするには、コンストラクタで変数を初期化します。

明らかにC++ 0x/C++ 11はあなたの上記のコードを許可しますが、私はを個人的にはコンストラクタですべて一緒に初期化することをお勧めします。

関連する問題