错误:“Function”不是非静态数据成员或“Class”的基类

时间:2013-09-10 20:57:31

标签: c++ class namespaces

我正在尝试理解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 :: Container”“

的基类

我尝试了更进一步的代码:

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 ++指南书,但我没有找到答案,因为我可能不知道如何参考这个问题)提前感谢

3 个答案:

答案 0 :(得分:5)

class声明中定义方法时,无法使用 :: scope resolution operator

此外,您的方法可能应该是公开的。最后,您必须确保您的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

};

答案 1 :(得分:0)

从此代码中您使用的是mChildren,但它未在Container类中定义。 mChildren应该是什么?

如果它是Component::Ptr的向量,则需要在班级中定义它。

std::vector<Component::Ptr>mChildren;

答案 2 :(得分:0)

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