почему я получаю сообщение об ошибке «не было объявлено в этой области»? - PullRequest
1 голос
/ 25 мая 2011

Я получаю 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 голосов
/ 25 мая 2011

Из вашего кода выглядит, что GetEntityIterator() возвращает указатель.Попробуйте изменить его на GetEntityIterator() (т.е. убрать указатель * перед ним).например,

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

Также убедитесь, что такая функция объявлена ​​/ определена в классе.

0 голосов
/ 25 мая 2011

Может быть из-за этого синтаксиса:

getEntityManager()->(*GetEntityIterator())

?

Я не уверен, что вы пытались сделать, но за оператором -> должен следовать операторимя члена класса.

Редактировать

После прочтения комментария iaamilind я, наконец, думаю, что понимаю, что вы пытались сделать.Вы пытались разыменовать итератор, но затем вам все равно пришлось разыменовать указатель (Entity*), который он возвратил, поэтому оператора -> было недостаточно.Вы правы, что вам нужно использовать скобки и оператор * - но вы поставили их не в том месте.Вот что вы должны сделать:

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