パブリックメソッドと変数を設定するのを忘れているだけです
class Number:public Element, public Setupable
{
public:
Number(): Element(), Setupable() {}
vector<Digit> digit_vector;
};
ところで、メンバー変数を public にすることは必ずしも良い考えではありません。digit_vector を返すメソッドを提供する必要があります。
//the method is provided in 2 soups, and there are reson for that
//even if you can omitt the "const" version, is better you keep both
const vector<Digit> & getDigits() const { return digit_vector; }
vector<Digit> & getDigits() { return digit_vector; }
または、クラスを単なる「データコンテナ」にする必要がある場合は、構造体にします
struct Number:public Element, public Setupable
{
//default construsctors of Element and Setupable are still called!
//if not providing a default constructor, the compiler will create one
//automatically calling all default constructor (including the vector's
//one. Also digit_vector is constructed.
vector<Digit> digit_vector;
};
struct は class と同じですが、唯一の違いは、デフォルトではメンバーがすべて public であるため、"public:" を指定する必要がないことです。良いスタイルは、クラスのみを使用し (パブリックまたはプライベートにする必要があるものを覚えておく必要があります)、動作/ロジックがほとんどないデータ コンテナーがある場合は構造体のみを使用することです。
そう書く:
class Number:public Element, public Setupable
{
//default construsctors of Element and Setupable are still called!
//if not providing a default constructor, the compiler will create one
//automatically calling all default constructor (including the vector's
//one. Also digit_vector is constructed.
public:
vector<Digit> digit_vector;
};
も有効です。ただし、通常、コンストラクターを暗黙的に呼び出すことは望ましくありません。