Я работаю над 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));
}
}
}
Вы определили drawRockets
как глобальная функция вместо функции-члена Player
учебный класс.
Вы должны указать, что 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));
}
}
}
У вас есть ошибки в вашем коде:
Во-первых, когда вы определяете метод вне его класса, вы должны указать, что он находится в области видимости класса во время объявления, например:
void Player::drawRockets( ISprite *r ) { ... };
// ^^^^^^^^
это решит ваш "rocketVector : undeclared identifier"
ошибка.
Здесь оператор области (::
(два двоеточия) используется для определения члена класса вне определения самого класса.
Кроме того, это очень плохая практика для using namespace ...
в заголовочном файле вы должны избегать этого.
Если вы удалите using namespace ...
не забудьте преобразовать:
vector<point> rocketVector;
в
std::vector<point> rocketVector;
// ^^^^^