2017-03-02 3 views
-1

私は自分の状況の文言に完全には分からないので、答えを見つけることが難しいです。基本的に、別のクラスB(has-a関係)のプライベートメンバーを持つクラスAがある場合、クラスAのコンストラクタを作成するにはどうすればよいですか?関数内の型としてクラスを渡す方法

クラスのコンストラクタ:

classA::classA(int a, int b, classB c); 

これは私に「エラー与える:への呼び出しに該当する関数 『ClassBの:: ClassBのを()』と、その後その引数に基づいて候補者とどのように多くの私が提供さを示しています。また、もちろん、cの前に期待される主要機能。私はおそらくコードが非常に一般的なので、私は正しい方向に私を指すために一般的な答えが必要なので、かなり大きいものがありません。あなたはBとAのコードの残りの部分を可能な限り最小限に抑えることができます。ありがとう!

+0

コンストラクタのコードを追加することもできます。とにかく、Aのコンストラクタがパラメータを持たないコンストラクタでBメンバを初期化しようとしているように見えますが、後者にはBメンバがありません。 – mcrlc

+0

コンテキストが不十分です。 classA:classAの単一のコロンは不審です。これはgotoのラベルですか? –

+0

あなたの質問が改善され、コードが表示されます。 [ガイドラインの掲載についてはこちらを参照してください] –

答えて

0

宣言は動作するはずです後。classBであれば今、私はあなたが行っているかもしれないものを推測するが、classBのあなたの宣言は、classA

class classA{ 
    ... 
} 

class classB{ 
    ... 
} 

そして最後の後に行われている

class classB 
{ 
public : 
    int b; 
    classB() 
    { 
     b = 1; 
    } 
}; 

class classA 
{ 
public: 
    classA(int a, int b, classB c) 
    { 
     ;// 
    } 
}; 

int main() 
{ 
    classB b; 
    classA a(1, 2, b); 

    return 0; 
} 

classAの中で宣言し、コンストラクタに渡すには静的でなければなりません。このような。

class classA 
{ 
public: 
    static class classB 
    { 
    public: 
     int b; 
     classB() 
     { 
      b = 1; 
     } 
    }; 


    classA(int a, int b, classB c) 
    { 
     ;// 
    } 
}; 

int main() 
{ 
    classA::classB b; 
    classA a(1, 2, b); 

    return 0; 
} 
+0

私は彼が 'class B'にメンバー変数' A a; 'を含むことを提案していると思います。 –

+0

はい、ありがとうございます。編集されました。 – Ultraviolet

1

私が理解しているように、クラスA内のプライベートメンバーBはコンストラクタの初期化リストで初期化されません。結果として、Bのデフォルトのコンストラクタが呼び出されます。これはエラーの示唆が利用できないためです。

class A { 
    B b; 
public: 
    A(/* parameters */) 
    : b(/* parameters to construct b */) // missing part 
    { } 
}; 
関連する問題