2012-03-09 74 views
0
class Game { 
    public: 
    void draw_string(const char *text, int x, int y, TTF_Font *font, SDL_Color color, bool center); 

    private: 
    void spawn_enemies(vector <Enemy*>& enemies); 
}; 

我有一个类的定义,并spawn_enemies的定义如下:作为整数传递的参数?

void Game::spawn_enemies(vector <Enemy*>& enemies) { 
    if (rand() % difficulty == 0) { 
    Enemy *enemy = new Enemy(screen, zombie_image); 
    enemies.push_back(enemy); 
    } 
} 

然后我打电话spawn_enemies:

game.spawn_enemies(enemies); 

我定义的敌人为:

vector<Enemy*> enemies; 

任何想法,为什么我得到这个错误:

error: no matching function for call to ‘Game::spawn_enemies(std::vector<Enemy*>&)’    
note: candidate is: 
note: void Game::spawn_enemies(int) 
note: no known conversion for argument 1 from ‘std::vector<Enemy*>’ to ‘int’ 
+1

您将spawn_enemies()声明为私有 - 不知道如何将它作为Game的实例调用,就像它是公共方法一样?尝试公开。不知道为什么这个奇怪的错误虽然... – JTeagle 2012-03-09 18:53:23

+0

我也试图宣布它为公共,但它仍然无法正常工作。事实上,我得到了同样的错误。 – 2012-03-09 18:59:17

+5

粘贴*完整的错误*。三重检查你正在粘贴的代码,包括所有相关的位。 – 2012-03-09 19:00:19

回答

2

I wasn't doing "using namespace std;" on the header file, so it wasn't including vector, which was causing a lot of weird mistakes

这就是为什么它是很好的使用std ::而不是使用空间std。 它使你的代码更容易理解,并且如果你的代码添加了游戏或敌人到STL(不太可能,我知道),你的代码仍然会编译。它可以让你添加自己的矢量版本,最小/最大等,如果你真的想(我不会推荐它)。

+1

即使你的评论非常有效,唯一的问题就是资格化向量遍布整个地方 - 就是它不必要地膨胀了代码,我更喜欢'使用std :: vector'作为折衷。 – JTeagle 2012-03-09 22:25:09