我正在尝试理解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 ++指南书,但我没有找到答案,因为我可能不知道如何参考这个问题)提前感谢
答案 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()
做什么的?尝试删除该调用,看看会发生什么。