带有指针构造函数的指针

Pointer with a pointer constructor

本文关键字:指针 构造函数      更新时间:2023-10-16

在C++中,我如何实现以下目标:

// player.h
#ifndef PLAYER_H
#define PLAYER_H
class Player {
    public:
        Player(Cake* cake);
}
#endif
// player.cpp
#include "cake.h"
#include "player.h"
Player::Player(Cake* cake) { }
// cake.h
#ifndef CAKE_H
#define CAKE_H
class Cake {
    public:
        Cake( );
}
#endif
// cake.cpp
#include "cake.h"
Cake::Cake() { }
// main.cpp
#include "player.h"
#include "cake.h"
int main() {
    Cake* cake();
    Player* player(cake); // This does not work
    return 0;
}

换句话说,拥有一个Player指针,该指针在其构造函数中接受Cake指针。

但是,当我尝试使用g++编译应用程序时,我会得到以下错误:error: cannot convert ‘Cake* (*)()’ to ‘Player*’ in initialization

这可能是有道理的,但我想知道为什么我不能有一个接受指针的指针(在构造函数中(

这看起来像是一个错误的本地初始化。

Cake* cake();
Player* player(cake);

需要重写为

Cake* cake = new Cake();
Player* player = new Player(cake);
Cake* cake();

这里cake并不像您所设想的那样是一个变量。编译器看起来好像cake()是一个正向声明,它返回Cake*并且不带任何参数。

可以是

Cake cake;
Player *player = new Player(&cake);

这是正确的C++语法:

Cake* cake = new Cake();
Player* player = new Player(cake); 

Cake在player.h中是未知类型。使用前向声明:

// player.h
class Cake;
class Player
{
  private:
    Cake* m_cake;
  public:
    Player( Cake* c ) : m_cake(c) {}
};