我将首先显示我的代码,然后解释我的问题:

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并在if / else循环中调用isClicked()。当我执行当前代码时,Code :: Blocks给我这个错误:

错误:“常量类std :: unique_ptr”没有名为“ isClicked”的成员|

我有一个语法上的小问题,如果有人向我解释一下,我将不胜感激。

谢谢!

最佳答案

我想你的意思是:

dynamic_cast<SButton*>(SSceneManager::getGUIManager().getObject("testbutton").get())->isClicked()


您要根据isClicked的结果而不是dynamic_cast的结果调用getObject

09-07 03:30