首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非静态数据成员c++的无效使用

非静态数据成员c++的无效使用
EN

Stack Overflow用户
提问于 2014-03-05 17:13:50
回答 1查看 7.4K关注 0票数 0

我已经看了各种各样的问题答案,从同样的标题开始,但没有用,所以不幸的是,我不得不张贴我自己的版本。我会尽我所能全面地解释。我得到的错误如下

error: invalid use of non-static data member 'MainState::pellet'

此错误与Player类文件中的函数有关,该函数试图访问在另一个文件中声明的由5个Pellet类对象组成的数组的成员。下面是导致错误的函数:

代码语言:javascript
复制
    void Player::onCollide(std::list<Entity*>& entityList)
{

    //create two iterators so can do self-checks
    std::list<SnakePieces>::iterator i;
    std::list<SnakePieces>::iterator m;


    //collision with pellet
    for(Entity* player : entityList)
    {
        Player* p = dynamic_cast<Player*>(player);

        if(p)
        {
            i=p->Snake_List.begin();
            for(int t=0; t < 4; t++)
            {
                if(i->x==MainState::pellet[t]->x)
                {

                    return;
                }

            }

        }


    }

//all collisions for the first snake
    auto itPlayer = entityList.begin();
    Player* p = dynamic_cast<Player*>(*(itPlayer++));
    Player* p2 = dynamic_cast<Player*>(*itPlayer);
    if(p)
    {
        if(i != m)
        {
            i=p->Snake_List.begin();
            for(m=p2->Snake_List.begin(); m != p2->Snake_List.end(); m++)
            {
                if ((i->x == m->x) && i->y == m->y)
                {
                    p->respawn();
                    return;
                }
            }
        }
    }

数组是在MainState类头文件中声明的,如下所示:

代码语言:javascript
复制
class MainState : public prg::IAppState,
    public prg::ITimerEvent
{
public:
    void onRender( prg::Canvas& canvas ) override;
    void onTimer(prg::Timer & Timer) override;
    void checkBoundaries();


    Pellet* pellet[5] {new Pellet(), new Pellet(), new Pellet(), new Pellet(), new Pellet()};
private:

    //timers
    prg::Timer Timer {0, 150, *this};
    prg::Timer Spawn_Timer {1, 5000, *this};

    //players & pellets
    std::list<Entity*>     players_ { new HumanPlayer( "Solid Snake"), new HumanPlayer ( "Liquid Ocelot")};



    //images
    prg::Image  background_;

    //bools
    bool newPlayer = false;
    bool timerRunning = false;


};

我已经删除了大量与问题无关的代码,但我无法理解问题是什么,以及为什么我无法访问这些数据。我对很多c++都很陌生,所以我知道我做错了什么,或者没有在这里实现什么,但很抱歉,尽管读了一个小时左右的类似问题,我还是看不到什么。希望有人能照亮这一点,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-05 17:29:29

正如错误所述,pelletMainState的非静态成员;因此只能作为MainState对象的一部分访问它。您正在尝试访问它,就像它是一个静态成员一样,它独立于任何对象存在。

如果您的Player类需要访问它,那么它将需要对它或包含它的MainState对象的引用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22204551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档