Я покажу свой код первым тогда объяснить мой вопрос:понижающего приведение базового класса в контейнере для производного класса
std::vector<std::unique_ptr<SGUIObject> > m_objects;
const std::unique_ptr<SGUIObject>& SGUIManager::getObject(const std::string& object_name)
{
for (auto const& iter : m_objects)
{
if (iter.get()->getObjectName() == object_name)
return iter;
}
}
//SButton is derived from SGUIObject
//m_clicked is a boolean member in SButton (private)
//isClicked is a public member method of SButton
const bool isClicked() const { return m_clicked; }
if (dynamic_cast<SButton>(SSceneManager::getGUIManager().getObject("testbutton").isClicked()))
std::cout << "Clicked!" << std::endl;
Я просто копировать вставленный из нескольких файлов, так что это выглядит странно, когда все вместе взятые , В любом случае, то, что я пытаюсь сделать, сбрасывается из SGUIObject в SButton и вызывает isClicked() в цикле if/else. Когда я делаю свой текущий код, Code :: Blocks дает мне эту ошибку:
error: 'const class std :: unique_ptr' не имеет имени с именем 'isClicked' |
У меня такое чувство, что у меня небольшая синтаксическая проблема, и я был бы чрезвычайно благодарен, если бы кто-то объяснил мне это.
Спасибо!
Ваши скобки ошибочны. – OlivierH