2015-11-22 1 views
1

Это мой .hppКак объявить класс в моей структуре?

class playerBat 
{ 
    public: 
     playerBat(int x, int y); 
     sf::RectangleShape *getShape(); 
     void setShape(sf::RectangleShape *Shape); 
    private: 
     sf::RectangleShape shapeBat; 
}; 

typedef struct s_game_elements 
{ 
    playerBat playerOne(int, int); 
    playerBat playerTwo(int, int); 
} t_game_elements; 

И это, как я его инициализацию:

t_game_elements gameElements; 

playerBat playerBatOne(0, 200); 
playerBat playerBatTwo(790, 200); 

gameElements.playerOne = playerBatOne; 
gameElements.playerTwo = playerBatTwo; 

Но составитель говорит:

src/main.cpp:14:18: error: reference to non-static member function must be called gameElements.playerOne = playerBatOne; 

Что я сделал не так? Извините, если это что-то очень очевидно, но я начал изучать CPP недавно, и я никогда не имел эту ошибку в С.

+4

'playerOne' является функцией. Вы пытаетесь назначить функцию. Избавьтесь от параметров '(int, int)', если вы просто хотите переменную (т. Е. 'PlayerBat playerOne;'). – Cornstalks

+0

Я пытаюсь назначить моей структуре класс playerBat, так что я делаю неправильно? –

+0

@Cornstalks У меня есть ошибка 'no matching constructor для инициализации 't_game_elements' (aka 's_game_elements')', если я это сделаю, как я могу ее исправить? –

ответ

2

Кажется, вы имели в виду следующего

typedef struct s_game_elements 
{ 
    playerBat playerOne; 
    playerBat playerTwo; 
} 

В противном случае в этом ЬурейеЙ декларации Struture имеет два функции вместо элементов данных типа playerBat

typedef struct s_game_elements 
{ 
    playerBat playerOne(int, int); 
    playerBat playerTwo(int, int); 
} 

Примите во внимание, что есть опечатка

t_game_elements gameElements; 
^^^ 

Раннего название ЬурейеГо в декларации ЬурейеЙ выглядело

s_game_elements 
^^^ 
+0

Спасибо! У меня нет опечатки в моем коде, я только что сделал копию/прошёл не так: s Однако у меня есть ошибка, которую я не могу понять, это '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'должен явно инициализировать член 'playerOne', который не имеет конструктора по умолчанию ', получил идею? –

+1

@DimitriDanilov Класс playerBat не имеет конструктора по умолчанию. В этом случае другой класс не может инициализировать свои члены данных. –

+2

@DimitriDanilov Определить конструктор по умолчанию в классе playerBat или определить конструктор по умолчанию в struct s_game_elements и вызвать конструктор playerBat в списке mem-initializer или использовать в этой структуре сжатые инициализаторы. –

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