Я пытаюсь сделать что-то вроде кода ниже. Note
- класс, который наследуется от BaseModel
. В какой-то момент я присваиваю экземпляр BaseModel
экземпляру Note
, но позже, когда я попытаюсь вернуть начальную ноту, кажется, что это невозможно.Почему я не могу отбрасывать из базового класса в дочерний класс в 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'. Попробуйте добавить конструктор в 'Note', который принимает в качестве аргумента const-baseModel' const. Тогда вы, вероятно, поймете, что здесь происходит. – hyde
'notes.push_back (модель); // Ошибка, хотя модель - это записка. Хм, нет, это не так. Вы объявили модель как «BaseModel». (Я предполагаю, что ваше соглашение об именах является разумным и что 'BaseModel' является базой' Note') – Borgleader
_I знаю, что я мог бы заставить его работать с указателями, но я хотел бы понять, почему он не работает со ссылками. _ ** ** работает со ссылками. Вы ** ** не используете ссылки. –