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 を受け取り、PointaCGame*を返す関数です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 に答える