私は以下のコードのようなことをしようとしています。 Note
は、BaseModel
を継承するクラスです。ある時点でインスタンスにBaseModel
インスタンスを割り当てますが、後で最初のメモを取り戻そうとすると、それは不可能なようです。なぜC++で基本クラスから子クラスにキャストできないのですか?
std::vector<Note> notes;
Note note;
notes.push_back(note);
BaseModel model = Note(); // OK
notes.push_back(model); // Error even though `model` is a `Note`
Note note2 = (Note)model; // Also error, cannot get the `Note` instance back
私はポインタで作業することができますが、なぜ値で動作しないのか理解したいと思います。何か案が?
'model'の初期化は既にオブジェクトのスライスを行います...' model'は 'Note'ではありません。引数として 'BaseModel' const referenceをとる' Note'にコンストラクタを追加してみてください...ここで何が起こっているのか分かります。 – hyde
'notes.push_back(model); //モデルが「Note」であってもエラーです。うーん、そうではありません。モデルを 'BaseModel'と宣言しました。 (私はあなたの命名規則が正当で、 'BaseModel'が' Note'の基底であると仮定しています) – Borgleader
_ポインタで作業することができますが、なぜそれが参照ではうまくいかないのか理解したいと思います。 _それは**参照を使って動作します**。あなたは参照を使用していません**。 –