2015-05-13 5 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 

} 

в 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 ich будет работать, только если в этот момент был инициализирован world.

+0

player = Player (world.getIndexWd(), world.getIndexHi()); player.load(); Я сделал это в функции загрузки, но он не работает. Это приводит к следующей ошибке: - Ошибка: неверное использование функции-члена (вы забыли '()'?) – arandomguy

+0

@rkj: Вы также изменили 'player' как переменную, как я уже сказал?Предполагая, что это должна быть переменная, конечно. Я просто размышляю, поскольку код, который вы опубликовали, не имеет большого смысла. –

+0

Да, я сделал, изменил его на Player Player ;. Но теперь он дает эту ошибку: - ошибка: нет соответствующей функции для вызова «Player :: Player()» – arandomguy

1

Вы не определите функцию

Player player(int indWd, int indHi); 

в файле .cpp.

Также вам нужно либо сделать его статическим в своем классе Player, либо использовать объект для его вызова.

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

Возможно также будет

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

, но я бы не рекомендовал использовать его, так как Player объект будет уничтожен после этого.

2

Rewrite как:

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

player является функцией членом в текущем классе, и вы не можете применить .load на него.

Смежные вопросы