В конструкторе одного из моих классов У меня есть эта строка:Попытка указателя обратного приведения объекта в станде :: вектор
m_Projects = std::vector<parent_project>(); //m_Projects type is std::vector<parent_project>
m_Current = nullptr; //m_Current type is parent_project*
В зависимости от этого же класса, у меня есть эта строка:
m_Projects.push_back(local_project(TITLE, DEMO, FILE)); //local_project class derives from parent_project class.
В третьей функции этого же класса, у меня есть такие строки:
m_Current = &m_Projects[0];
if (dynamic_cast<local_project*>(m_Current))
SetCurrentProject(dynamic_cast<model::local_univariate::local_univariate_project*>(m_Current));
dynamic_cast возвращает нулевое значение, но, как я понимаю, cast должен работать, поскольку m_Current является указателем на первый элемент m_Projects, который является объектом local_project. Кажется, я что-то упускаю.
Точно так. Найдите «срез объектов», чтобы понять больше. –
Спасибо вам обоим. Я не думал о копировании моих объектов. Когда я смотрю ближе в отладчике, я теперь это понимаю (расширение вектора показывает строго некоторые объекты базового класса). – DreamTool
Должно, по крайней мере, упомянуть уникальный ptr, это почти наверняка будет правильным, чем исходные указатели, потому что его вектор в настоящее время принадлежит объектам. –