2012-06-04 21 views
5

Yapıcımın intialization listesindeki bir diziyi başlatmaya çalışıyorum ve dizinin Stack sınıfımda genel statik sabit olan MAX_SIZE boyutuna sahip olmasını istiyorum. Bunu nasıl çalıştırabilirim? Yardımlarınız için şimdidenKurucunun başlatma listesindeki dizilimi başlat

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; 

Teşekkür: derleyici onlar 'çift [0U]' için 'çift'

İşte benim kod tahsisinde uyumsuz türleri vardır diyerek şikayet ediyor. yorumlarda belirtildiği gibi

+2

Tamamen mazoşist değilseniz: 'statik sabit imzasız max_size = 4; std :: vektör dizisi; Yığın :: Yığın(): dizi (MAX_SIZE) {} ' –

+1

Belki daha basit bir yolu var mı? yani vektörleri kullanmadan. Programın dizi veri üyemi MAX_SIZE boyutunda kabul etmesini nasıl sağlayabilirim? – Sean

+0

“std :: vector” işlevini kullanmaya alışabilirim. Nadiren diziler kullanırım; Neredeyse her zaman bir std :: vektör kullanacağım. @Jesse Good'in verdiği kod da işe yaramalı. –

cevap

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

Ama std::vector daha iyi olurdu.

+0

Anladım .. temel olarak başlatma listesindeki diziyi başlatmayı engelleyin. Mümkün değil, değil mi? Ayrıca, MAX_SIZE sabitimi, yaptığım gibi ana yoldan yazmak mümkün değil mi? – Sean

+1

Sormamın nedeni, burada farklı bir şekilde okumamın nedeni, tanımın şu sınıfın dışında olması: http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom .ibm.xlcpp8a.doc% 2Flanguage% 2Fref% 2Fcplr038.htm – Sean

+0

'intializer listesindeki dizi()' tüm öğeleri başlatır. Doğru ve ben MAX_SIZE 'yi tanımlamadım çünkü sadece koddaki değerini kullanıyorum. Başka bir yerde kullanmanız gerekiyorsa, 'MAX_SIZE' sınıfının dışında tanımlayın. –