1

Stack.hで次のコードを記述しました。

class Stack{
public:
    inline bool full();
    int size();
    inline bool empty();
    bool push(const string&);
    bool pop(string &s);
    bool peek(string &s);
    virtual void print();
    virtual ~Stack(){}

protected:
    vector<string> _elem;
    int const _maxsize=10;    // line X
};

エラーが発生しました:

Stack.h:14: error: ISO C++ forbids initialization of member ‘_maxsize’
Stack.h:14: error: making ‘_maxsize’ static
make: *** [Stack.o] Error 1

X行目に静的キーワードを追加し、クラス定義の外部で変数を初期化すると、問題ない可能性があります。

しかし、私の質問は、非静的const変数を宣言し、それでも正常に初期化する方法はありますか?

4

3 に答える 3

2

はい、コンストラクターでこれを初期化します

const int NumItems;

Foo::Foo():
NumItems(15)
{
//....
}
于 2012-11-19T18:50:50.700 に答える
1

これはC++11で有効です。C ++ 03では、コンストラクターで初期化する必要があります。または、C ++ 11の場合:

class Stack{
    int const _maxsize{10};
};
于 2012-11-19T18:50:24.320 に答える
1

使用できますenum

class C {
  protected:
    enum { var = 10 }; 
}

この場合、C :: varはコンパイル時定数になり、テンプレートでも使用できます。

また、c ++ 11では、使用しようとしている宣言が許可されます。

于 2012-11-19T18:53:11.987 に答える