为什么我得到“未在此范围内声明”错误?

时间:2011-05-25 06:23:57

标签: c++ opengl codeblocks

我在以下代码片段中得到5个错误

其中4个错误

  

预期不合格的身份''(''   令牌|

和1个错误

  

未声明'GetEntityIterator'   在此范围|

GetEntityIterator()返回vector<*Entity>::iterator EntityIterator

GetAABB()会返回AABB

如果需要,我可以发布更多代码

    void Bomb::CreateExplosion(Game_Manager* EGame_Manager)
    {
    BombTexture->LoadTexture("Bomb.bmp");
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

    for(int iteration = 1; iteration <= 3; iteration++)
    {
        if(this->GetAABB()->CheckForCollision(this->GetAABB(), EGame_Manager->getEntityManager()->(*GetEntityIterator())->GetAABB()) == true)//check for collision against the unbreakable blocks or player and does what is necessary for each
        {
            if(EGame_Manager->getEntityManager()->(*GetEntityIterator())->GetType() == unbreakableblock)
            {
             break;
            }
            else if(EGame_Manager->getEntityManager()->(*GetEntityIterator())->GetType() == player)
            {
                EGame_Manager->getEntityManager()->(*GetEntityIterator())->GetLives() -= 1;
            }

        }
        else
        glBegin(GL_QUADS);
            glColor4f(   1.0f,    0.0f, 0.0f, 0.0f); //color red
            glTexCoord2f(0.0, 0.0); //uv coordinates
            glVertex3f( -2.0f + x,2.0f  + y,  0.0f); //top left
            //----------------------------------------------------
            glColor4f(   0.0f,    1.0f, 0.0f, 0.0f); //color green
            glTexCoord2f(1, 0.0 ); //uv coordinates
            glVertex3f(  2.0f + x,2.0f  + y,  0.0f); //top right
            //----------------------------------------------------
            glColor4f(   0.0f,    0.0f, 1.0f, 0.0f); //color blue
            glTexCoord2f(1, 1);
            glVertex3f( 2.0f + x, -2.0f + y,  0.0f); //bottom right
            //----------------------------------------------------
            glColor4f(   1.0f,    1.0f, 0.0f, 0.0f); //color red
            glTexCoord2f(0.0, 1); //uv coordinates
            glVertex3f(-2.0f + x, -2.0f + y,  0.0f); //bottom left
        glEnd();
    }

    glDisable(GL_TEXTURE_2D); //disable 2d textures

}

2 个答案:

答案 0 :(得分:0)

可能是因为这种语法:

getEntityManager()->(*GetEntityIterator())

我不确定你要做什么,但->运算符应该跟着该类成员的名字。

修改

在阅读了iaamilind的评论之后,我终于认为我理解你想要做什么。您试图取消引用迭代器,但是您仍然必须取消引用它返回的指针(Entity*),因此->运算符是不够的。你必须使用括号和*运算符,这是正确的,但你把它们放在了错误的地方。这是你应该做的:

(*EGame_Manager->getEntityManager()->GetEntityIterator())->GetType()

答案 1 :(得分:0)

从您的代码中看起来GetEntityIterator()返回指针。尝试将其更改为, GetEntityIterator()(即删除前面的指针*)。 e.g。

EGame_Manager->getEntityManager()->GetEntityIterator()->GetType();

还要确保在类中声明/定义了这样的函数。