1

当我试图在我的函数中返回一个指向玩家的指针时,我收到一个错误“返回类型与函数类型不匹配”。编译器的错误是:

'&' : 对绑定成员函数表达式的非法操作

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

在头文件中,这被定义为:

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

public:
    CPlayer* getPlayer();

关于我为什么会收到此错误以及如何删除它的任何想法?

编辑:

级别构造函数:

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);
 }
4

1 回答 1

3

因为在您的代码中,player是私有函数的名称:

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

这是一个接受 a Point、 aCGame*并返回 a的函数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
于 2012-05-20T17:12:24.867 回答