2

我试图理解 C++ 的语法,因为我对这门语言几乎很陌生,但我不知道我到底面临什么错误。

我在我的代码上实现了Component类并且工作正常

namespace GUI
{
class Component : public sf::Drawable
                , public sf::Transformable
                , private sf::NonCopyable
{
    public:
            //Variables
};
}

还有我正在学习的书要求我在 GUI 命名空间中实现另一个名为Container的类

Container::Container()
: mChildren()
, mSelectedChild(-1)
{
}
void Container::pack(Component::Ptr component)
{
    mChildren.push_back(component);
    if (!hasSelection() && component->isSelectable())
        select(mChildren.size() - 1);
}
bool Container::isSelectable() const
{
    return false;
}

我不明白的是他实现课程的方式,这给了我帖子标题中的语法错误。“错误:“mChildren”不是非静态数据成员或类“GUI”的基类::容器""

我尝试了进一步的代码:

class Container:

{

Container::Container()
: mChildren()
, mSelectedChild(-1)
{
}
void Container::pack(Component::Ptr component)
{
    mChildren.push_back(component);
    if (!hasSelection() && component->isSelectable())
        select(mChildren.size() - 1);
}
bool Container::isSelectable() const
{
    return false;
}
};

但是我仍然遇到语法错误=/到底出了什么问题,关于这个主题我应该读什么?(我也阅读了 C++ 指南书籍,但我没有找到答案,因为我可能不知道如何参考这个问题)提前谢谢

4

3 回答 3

7

class声明中定义方法时,不能使用范围::解析运算符

您的方法也应该公开。最后,您必须确保您的mChildren成员定义正确。

class Container
{
    // ...

public:
    Container()
//  ^^
       : mChildren()
       , mSelectedChild(-1)
    {
    }
    void pack(Component::Ptr component)
//       ^^
    {
         // ...
    }
    bool isSelectable() const
//       ^^
    {
        // ...
    }

private:
    std::vector<Component::Ptr> mChildren;   // Example of a definition of mChildren
    //          ^^^^^^^^^^^^^^ replace with the good type

};
于 2013-09-10T21:00:49.020 回答
0

在这段代码中,您正在使用 mChildren,但它没有在您的 Container 类中定义。mChildren 应该是什么?

如果它是一个向量,Component::Ptr你需要在你的类中定义它。

std::vector<Component::Ptr>mChildren;
于 2013-09-10T21:05:30.760 回答
0

为什么要mChildren在构造函数初始化列表中进行初始化?更具体地说,这个电话mChildren()在做什么?尝试删除该呼叫,看看会发生什么。

于 2013-09-10T21:24:11.737 回答