Эта форма работает, потому что она вызывает конструкторы членов класса.
X( int capacity )
: _stack( capacity ), //calls vector(int) constructor
_top( 0 ) // calls int(int) constuctor
{ }
1. Это не работает, потому что, как только вы находитесь внутри тела конструктора, конструкторы должны вызываться сдругой синтаксис.
X( int capacity )
{
_stack( capacity ); //this is not a constuctor call. But this is vector operator()(int) call. And vector does not have this operator defined.
//the proper constructor call in this place would be _stack = vector<int>( capacity );
_top=0;
}
Возможно, вы смешали это с сокращенной формой объявления и вызова конструктора.Если вы объявляете _stack векторным и инициализируете одновременно, вы можете написать:
vector<int> _stack( capacity );
Но это всего лишь краткая формаочевидно, потому что вы не можете просто назначить целое число на вектор
X( int capacity ){ _stack = capacity; _top=0; }