Я написал следующие коды в 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
если я добавлю ключевое слово static в строку X и инициализирую переменную вне определения класса, все может быть в порядке.
Но мой вопрос заключается в том, есть ли какой-нибудь возможный способ объявить нестатическую переменную const и все же успешно инициализировать ее ???
Это действительно в C ++ 11. В C ++ 03 вам придется инициализировать его в конструкторе. Альтернативно, в C ++ 11:
class Stack{
int const _maxsize{10};
};
Да, инициализируйте это в вашем конструкторе
const int NumItems;
Foo::Foo():
NumItems(15)
{
//....
}
Ты можешь использовать enum
class C {
protected:
enum { var = 10 };
}
В этом случае C :: var будет постоянной времени компиляции, которую можно использовать даже в шаблоне.
Кроме того, C ++ 11 позволяет объявление, которое вы пытаетесь использовать.