gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:54:58 25 4
gpt4 key购买 nike

我查看了以相同标题开头的各种问题的答案,但无济于事,所以很遗憾,我不得不发布自己的版本。我会尽可能全面地解释。我得到的错误如下

错误:无效使用非静态数据成员“MainState::pellet”

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

    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 类头文件中声明,如下所示:

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++ 很陌生,所以我知道我做错了什么或者没有在这里实现某些东西,但是尽管阅读了一个小时左右的类似问题,但还是看不到什么,抱歉。希望有人能对此有所启发,谢谢!

最佳答案

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

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

关于c++ - 非静态数据成员 c++ 的无效使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22204551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com