2013-03-25 3 views
0
    struct Ball { 
        SDL_Surface *picture; 
        SDL_Rect des; 
        SDL_Rect source; 
        int speedX; 
        int speedY; 
       }; 

       class Block { 
       public: 
        SDL_Surface *color; 
        SDL_Rect des; 
        SDL_Rect source; 
        bool activation; 
        bool invisibility; 

        bool checkHit (Ball *ball); 
        void makeInvisible(); 
       }; 

       bool Block::checkHit(Ball *ball) 
       { 
        if (activation) 
        { 

          if (ball->des.x >= Block.des.x && ball->des.x <= Block.des.x + Block.source.w) 
          { 
           ball->speedY *= -1; 
           activation = false; 
           return true; 
          } 
          else return false; 
        } 
       } 

Когда я хочу, чтобы скомпилировать эту программу, компилятор обнаруживает ошибку в блоке :: checkHit ошибки C2275: «Блок»: незаконное использование такого типа, как выражениеC++ | незаконное использование структур в классах

Что может Я делаю ?

+2

«Блок» - это тип, поэтому его нет. (точка) для него. 'Block.des.x' не является допустимым оператором. Или используйте 'this-> des.x' или просто' des.x'. – elmo

ответ

2

Если вы хотите получить доступ к собственным переменным-членам Блока, просто удалите Block., и все будет в порядке.

Если вы хотите быть абсолютно явным, вы можете использовать вместо this->des.x вместо простого des.x.

1

Вы используете имя класса в качестве префикса в своем выражении. Это недопустимый синтаксис, внутри класса вам не нужен префикс для доступа к членам. Замените выражения, такие как Block.des.x на des.x.

Смежные вопросы