私は構造体C++はクラス構築時にクラスを構成するメンバーですか?
struct MyStruct {
MyStruct(XML cfg) { ... }
int m_1, m_2, ... ;
}
そして今、コンパイラは体mystruct私はtehの継承の再生を考えるいけない空のコンストラクタ
error: no matching function for call to ‘MyStruct::MyStruct()’
MyClass(XML cfg) { m_struct = MyStruct(cfg); }
を持っていないことを不平を言っているクラス
class MyBaseClass {
public:
MyBaseClass() {}
MyStruct m_struct;
}
class MyClass : public MyBaseClass {
public:
MyClass(XML cfg) { m_struct = MyStruct(cfg); }
}
を持っていますそれは事実かもしれないので、私はそれを完璧に保った。 MyStructの空のコンストラクタを明示的に呼び出すことはありません。 m_structがメンバーなので、クラスMyClassはそれを行いますか?
それがそうである場合、メンバーを初期化しない方法があるのですか、これはメンバーとしてのポインタでのみ可能ですか?
は、私はちょうど私の構造に空のコンストラクタを追加することによって、または
MyClass(XML cfg) : m_struct = MyStruct(cfg) {}
にコンストラクタを変更することでこの問題を解決することができ承知していますが、私はまさにここに何が起こっているか知りたいです。
'struct'と' class'は同じです。彼らはここで有用なカテゴリを形成しません。 – juanchopanza
私は構造体を使用します。なぜなら、それは2つのパブリックメンバーしか含んでいないからです。クラスそのものには私の例よりも多くが含まれています、私は私の例では最小限のものにしようとしています – chrise
継承は実際にここでは役割を果たしません。 MyClassを完全に削除し、MyBaseClassをインスタンス化し、まったく同じ問題を抱えることができます。 – WhozCraig