2012-06-04 47 views
5

コンストラクタの初期化リストで配列を初期化しようとしていて、配列のサイズをMAX_SIZEにしたい。これはStackクラスのパブリック静的constである。どうすればそれを稼働させることができますか?あなたの助けを事前にコンストラクタの初期化リストで配列を初期化する

class Stack { 
    public:  
      Stack(); 
      static const unsigned MAX_SIZE; 
    private: 
      double array[]; 
      unsigned elements;  
    }; // class Stack 

    Stack::Stack(): array(array[MAX_SIZE]), elements(0) {} 

    const unsigned Stack::MAX_SIZE = 4; 

ありがとう:コンパイラは、彼らが「ダブル[0U]」から「double」の

はここに私のコードでの割り当てに互換性のない型を持っていると言って、文句を言います。

+2

完全にマゾヒスティックでない限り、静的const unsigned max_size = 4; std :: vector 配列。 Stack :: Stack():array(MAX_SIZE){} ' –

+1

もっと簡単な方法はありますか?すなわちベクトルを使用しない。サイズがMAX_SIZEの配列データメンバーを受け入れるプログラムを取得するにはどうすればよいですか? – Sean

+0

私は 'std :: vector'の使用に慣れるでしょう。私はめったに配列を使いません。私は 'std :: vector'をほとんどいつでも使用します。 @ Jesse Goodが与えてくれたコードもうまくいくはずです。 –

答えて

5
class Stack { 
     public: 
       Stack(); 
       static const unsigned MAX_SIZE = 4; 
     private: 
       double array[MAX_SIZE]; 
       unsigned elements; 
     }; // class Stack 

Stack::Stack(): array(), elements(0) {} 

しかし、std::vectorは、コメントに記載されているように良いでしょう。

+0

私は基本的に、初期化リストの配列の初期化を避けます。できない、正しい?また、私のやり方でメインの後にMAX_SIZE定数を書くことはできませんか? – Sean

+1

理由は私がここでは、定義がクラスの外にあるべきであることをここでは異なって読んでいるからです: http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom .ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fcplr038.htm – Sean

+0

インテルシザー・リストの 'array()'は、すべての要素を初期化します。あなたは正しいです、私は 'MAX_SIZE'を定義しませんでした。なぜなら、私はコード内の値だけを使用しているからです。他の場所で使う必要がある場合は、クラスの外側に 'MAX_SIZE'を定義してください。 –

関連する問題