2012-03-09 72 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