0

我正在研究 Space Invaders,在我的 Player 类中,我使用了一个名为 point 的结构的向量来存储火箭的坐标。出于某种原因,当我尝试在 .cpp 文件中使用它时,我得到了“rocketVector:未声明的标识符”。

有谁知道为什么?

我对 C++ 还是很陌生,我无法在谷歌上找到解决方案。它现在开始让我头疼了:)

谢谢你的帮助!

#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;

};

播放器.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));
        }
    }
}
4

3 回答 3

4

您定义drawRockets为全局函数而不是Player类的成员函数。

于 2013-08-21T20:15:05.673 回答
3

您需要指定该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));
    }
}
}
于 2013-08-21T20:15:47.643 回答
0

您的代码中有一些错误:

  • 首先,当您在其类之外定义一个方法时,您必须在声明期间指定它在类范围内,例如:

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

    这将解决您的"rocketVector : undeclared identifier"错误。

    这里的范围运算符(::,两个冒号)用于从类定义本身之外定义类的成员。

  • 此外,在头文件中添加是一种非常糟糕的做法using namespace ...,您应该避免这种做法。

  • 如果您删除using namespace ...不要忘记转换:

       vector<point> rocketVector;
    

       std::vector<point> rocketVector;
    // ^^^^^
    
于 2013-08-21T20:31:42.647 回答