2012-05-20 11 views
1

Я получаю сообщение об ошибке «Тип возврата не соответствует типу функции», когда я пытаюсь вернуть указатель на плеер в моей функции. Ошибка компилятора является:Тип возвращаемого значения C++ не соответствует типу функции

'&' : illegal operation on bound member function expression

CPlayer* CLevel::getPlayer() 
{ 
return &player; 
} 

В файле заголовка, это определяется как:

private: 
    CPlayer player(Point p, CGame* game); 

public: 
    CPlayer* getPlayer(); 

Любые идеи относительно того, почему я получаю эту ошибку и как я могу удалить его ?

EDIT:

конструктор Уровень:

CLevel::CLevel() 
{ 
Point p; 
this->game=game; 
p.x=0; 
p.y=0; 
player(Point p, CGame* game) {}; 

memset(tiles, GROUND, sizeof(TileType)*GRID_HEIGHT*GRID_WIDTH); 
} 

Player.cpp конструктор:

CPlayer::CPlayer(Point pos, CGame* game) 
{ 
this->game=game; 
Point p; 
p.x=0; 
p.y=0; 
setPosition(p); 
} 
+3

Вы пытаетесь вернуть адрес функции-члена, а не указатель на объект. – chris

+0

Как мне вернуть указатель на объект? (Я новичок на C++, так извините мое невежество) –

+0

Вы тоже новичок в C? –

ответ

3

Потому что в вашем коде, player это имя частной функции:

private: 
    CPlayer player(Point p, CGame* game); 

Это функция, которая принимает Point, CGame* и возвращает CPlayer.

Объявить члена в CPlayer данных вам нужно

private: 
    CPlayer player; 

, которые затем можно инициализировать в конструкторе, например:

CLevel(Point p, CGame* game) : player(p, game) {} 

и:

CLevel() : player(Point(), game) { 
    this->game = .... ; 
} 

Или, C++ 11, вы можете сделать это следующим образом:

private: 
    CPlayer player{Point(), nullptr}; // I am not sure where you were getting p and game in your original example 
+0

Я инициализирую CLevel(): player (Point p, CGame * game) {} в конструкторе CLevel()? Потому что я получаю эту ошибку: «Точка»: незаконное использование этого типа в качестве выражения « Также я получаю сообщение об ошибке« конструктор по умолчанию для класса CPlayer », но мне не нужен конструктор по умолчанию. –

+0

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

+0

@TamaraCaligari извините, у меня была ошибка, которая была любезно исправлена ​​Майком Де Симоном. Что касается конструктора по умолчанию, возможно, это потому, что у вас есть конструктор по умолчанию для 'CLevel', который попытается создать экземпляр' CPlayer' по умолчанию, если вы ничего не сделаете. – juanchopanza

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