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. 関数にargvを渡すことができません
- 4. コンストラクタ関数。グローバル変数への参照を上書きすることはできません
- 5. ctypesと関数への参照渡し
- 6. 派生クラス関数へのポインタをベースクラスに渡すことができません
- 7. なぜC++の関数に参照でファイルを渡すべきですか?
- 8. bigintを返すときに関数が結果セットを関数から返すことができません
- 9. 関数がNULLへのポインタを返すことはできますか?
- 10. 参照によって関数「マップコンテナ」に渡すときのセグメンテーションエラー
- 11. はModelオブジェクトをjavascript関数に渡すことができません
- 12. Angular Directiveでパラメータとして関数を渡すことができません
- 13. なぜ関数へのポインタのサイズがメンバ関数へのポインタのサイズと異なるのですか?
- 14. 文字列をjquery関数に渡すことはできませんか?
- 15. 'this'値をあるJavaScript関数から別の関数に渡すことができません。
- 16. 関数間で変数を渡すことはできません
- 17. JSオブジェクトまたは参照をJSオブジェクトにHTMLマークアップの関数に渡すことはできますか?
- 18. PHPの親関数はサブクラスのメンバーを見ることができません
- 19. 関数から値を返すことができません
- 20. 関数は静的関数ポインタを引数として受け入れることができますか?
- 21. 関数のパラメータに定数を渡すことができますか?
- 22. C関数ポインタにはどのような種類のC++関数を置くことができますか?
- 23. 値と参照型オブジェクトを返すことができる汎用関数
- 24. GroovyShellバインディングは、setVariableを実行するときにオブジェクトへの参照を渡すことができますか?
- 25. Intsの配列への参照を宣言するとき、なぜそれがconstポインタへの参照である必要がありますか?
- 26. 関数に文字列を渡すことは、それを値でコピーするか、参照で渡すことはできますか?
- 27. サブオブジェクトにthis->ポインタを渡すことができません
- 28. sprintf型の引数をPerl関数に渡すことはできますか?
- 29. この関数を参照によって呼び出す必要があるのはなぜですか?
- 30. constexpr関数ではconstポインタへの参照を返すが、コピーを返さないのはなぜですか?
あなたはそうです。質問はなんですか? –
ちょうど理由を知りたいですか? – lovespring