class Parent{
};
class Child:
public Parent
{
}
void Func(Parent*& param)
{
}
Child* c=new Child;
Func(c); //error
4
A
答えて
3
これは仕様です。
c
はParent*
ではなく、Child*
です。 Parent*
に変換するには、暗黙の変換が必要です。この暗黙の変換により、少なくとも概念的にはParent*
という一時オブジェクトが生成され、非const参照は一時オブジェクトにバインドできません。あなたはOKだろうと、Parent *const &
を取るためにFunc
を変更することができる場合
struct Parent {};
struct Child: Parent { int a; };
void Func(Parent*& param) { param = new Parent(); }
int main() {
Child* c = 0;
Func(c); // suppose this was allowed, and passed a reference to "c".
c->a; // oh dear. The purpose of a type system is to prevent this.
}
:ここ
7
が理由です。
4
C++ FAQの項目"21.2 Converting Derived* → Base* works OK; why doesn't Derived** → Base** work?"を参照してください。
これはDerived * &をBase * &に変換するのと同じ問題であることに注意してください。
乾杯&hth。、
関連する問題
- 1. 非メンバ関数ポインタが必要なときにメンバ関数ポインタを渡す?
- 2. ディクショナリ値への直接参照を関数に渡すことができないのはなぜですか?
- 3. TBBタスクへの参照で関数を渡すときに値を返すことができない
- 4. 関数から返されたポインタを参照渡しすることはできません
- 5. 抽象クラスへの参照をスレッド関数に渡すことはできませんか?
- 6. クラス内から関数への参照の関数を呼び出すことができません
- 7. 引数とは異なる関数へのポインタを返す関数を書くことはできますか?
- 8. 関数にargvを渡すことができません
- 9. 関数にargvを渡すことはできません。
- 10. 関数参照を渡すときにargsを渡す
- 11. JS関数への参照渡しとプロパティのオーバーライドはできますが、オブジェクト全体を上書きすることはできませんか?
- 12. コンストラクタ関数。グローバル変数への参照を上書きすることはできません
- 13. 配列を返すPHP関数:なぜ参照渡しが必要ですか?
- 14. 特定の数の参照配列を関数にパラメータとして渡すことはできますか?
- 15. 親空間にある関数内の関数を参照できますか?
- 16. 配列へのポインタを関数に渡すときのセグメンテーションフォールト(C++)
- 17. ctypesと関数への参照渡し
- 18. Selenium Pythonバインディングで変数を関数に渡すことができません
- 19. なぜC++の関数に参照でファイルを渡すべきですか?
- 20. 派生クラス関数へのポインタをベースクラスに渡すことができません
- 21. 関数へのポインタが左辺参照にバインドできないのはなぜですか?
- 22. 関数間の変数にデータを渡すことができません
- 23. 関数がNULLへのポインタを返すことはできますか?
- 24. 関数内にグローバル変数を渡すことができません
- 25. [C]:構造体へのポインタへのポインタが関数に渡されたとき、なぜ構造体の要素を変更できないのですか?
- 26. 参照によって関数「マップコンテナ」に渡すときのセグメンテーションエラー
- 27. 特定のオブジェクトのインスタンス関数への参照を渡すことはできますか?
- 28. bigintを返すときに関数が結果セットを関数から返すことができません
- 29. 関数がポインタを返すときに、なぜ "初期化は整数からポインタを作る"のですか?
- 30. なぜ関数へのポインタのサイズがメンバ関数へのポインタのサイズと異なるのですか?
あなたはそうです。質問はなんですか? –
ちょうど理由を知りたいですか? – lovespring