2015-05-13 52 views
-3

球員類: -「不具有類類型」 錯誤

#ifndef PLAYER_H 
#define PLAYER_H 

class Player : public sf::Drawable, sf::Transformable 
{ 
    public: 
     Player(int indexWd, int indexHi); 
     bool load(); 
}; 

遊戲類: -

#ifndef GAME_H 
#define GAME_H 
#include "Player.h" 
#include <SFML/Graphics.hpp> 

class Game 
{ 
    public: 
     Game();   
     Player player(int indWd, int indHi); 
     void load(); 
}; 

#endif // GAME_H 

遊戲裏面的cpp文件: -

#include "Game.h" 

Game::Game() 
{ 

} 

void Game::load() 
{ 
    player(world.getIndexWd(), world.getIndexHi()); 
    player.load(); //gives error 

} 

at player.load()在上述方法中,編譯器給出以下錯誤: -

error: '((Game*)this)->Game::player' does not have class type|

爲什麼會發生此錯誤?

回答

4

你已經聲明瞭一個名爲player的成員函數,並且你試圖使用它,就好像它是一個變量。

我猜測,它應該是一個數據成員:

Player player; 

load函數初始化:

player = Player(world.getIndexWd(), world.getIndexHi()); 
player.load(); 

雖然這個,因爲它沒有將無法正常工作因此必須在構造函數中初始化:

Game::Game() : player(world.getIndexWd(), world.getIndexHi()) {} 

wh如果此時world已經初始化,那麼只有該功能可用。

+0

player = Player(world.getIndexWd(),world.getIndexHi()); player.load(); 我在加載函數中做了這個,但它不工作。它給出了以下錯誤: - 錯誤:無效使用成員函數(你忘了'()'?) – arandomguy

+0

@rkj:你是否也將'player'更改爲變量,就像我說的那樣?當然,假設它應該是一個變量。我只是在猜測,因爲你發佈的代碼沒有多大意義。 –

+0

是的,我把它改成Player player ;.但現在它給這個錯誤: - 錯誤:沒有匹配函數調用'Player :: Player()' – arandomguy

1

你沒有在你的.cpp文件中定義功能

Player player(int indWd, int indHi); 

此外,您還需要在Player類中將其設置爲靜態,或者使用對象來調用它。

Player p = player(world.getIndexWd(), world.getIndexHi()); 
p.load(); 

可能也將是

player(world.getIndexWd(), world.getIndexHi()).load(); 

,但我不會建議使用它,因爲你的Player對象將被破壞之後。

2

改寫爲:

void Game::load() 
{ 
    Player p = this->player(world.getIndexWd(), world.getIndexHi()); 
    p.load(); 
} 

player是當前類的成員函數,你不能把它應用.load

相關問題