необъявленный идентификатор, когда функция находится в файле cpp

Я работаю над Space Invaders и в своем классе игрока я использую вектор структуры с именем point для хранения координат ракет. По какой-то причине я получаю «rocketVector: undeclared identifier», когда пытаюсь использовать его в файле .cpp.

Кто-нибудь знает почему?

Я все еще довольно новичок в C ++, и я не смог найти решение в Google. это начинает делать мою голову сейчас 🙂

Спасибо за любую помощь!

#include <windows.h>
#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <iostream>
#include <stdio.h>
#include <MMSystem.h>

using namespace std;

class Player
{
public:
Player(void);
~Player(void);
void drawRockets(ISprite *r);
vector<point> rocketVector;

};

Player.cpp

void drawRockets(ISprite *r) {

// Draw appropriate number of rockets
for(int i = 0; i < rocketVector.size(); i++){

if( rocketVector[i].y < 0.0 ){
// Remove rockets off screen
rocketVector.erase(rocketVector.begin() + i);
}
else{
rocketVector[i].y -= 20;
r->draw(int(rocketVector[i].x), int(rocketVector[i].y));
}
}
}

0

Решение

Вы определили drawRockets как глобальная функция вместо функции-члена Player учебный класс.

4

Другие решения

Вы должны указать, что drawRockets метод является членом Player учебный класс:

void Player::drawRockets(ISprite *r) {

// Draw appropriate number of rockets
for(int i = 0; i < rocketVector.size(); i++){

if( rocketVector[i].y < 0.0 ){
// Remove rockets off screen
rocketVector.erase(rocketVector.begin() + i);
}
else{
rocketVector[i].y -= 20;
r->draw(int(rocketVector[i].x), int(rocketVector[i].y));
}
}
}
3

У вас есть ошибки в вашем коде:

  • Во-первых, когда вы определяете метод вне его класса, вы должны указать, что он находится в области видимости класса во время объявления, например:

    void Player::drawRockets( ISprite *r ) { ... };
    //   ^^^^^^^^
    

    это решит ваш "rocketVector : undeclared identifier" ошибка.

    Здесь оператор области (::(два двоеточия) используется для определения члена класса вне определения самого класса.

  • Кроме того, это очень плохая практика для using namespace ... в заголовочном файле вы должны избегать этого.

  • Если вы удалите using namespace ... не забудьте преобразовать:

       vector<point> rocketVector;
    

    в

       std::vector<point> rocketVector;
    // ^^^^^
    
0
По вопросам рекламы [email protected]