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」は非静的データメンバーまたはクラスの基本クラスではありません」 ::コンテナ"" .

私はさらにコードを試しました:

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宣言内でメソッドを定義する場合、スコープ解決 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

};
于 2013-09-10T21:00:49.020 に答える
0

mChildrenコンストラクターの初期化リストで初期化するのはなぜですか? より具体的には、この呼び出しは何をしているのmChildren()ですか? その呼び出しを削除して、何が起こるかを確認してください。

于 2013-09-10T21:24:11.737 に答える