指针与指针构造函数

时间:2011-10-28 11:14:09

标签: c++ pointers compiler-errors initialization

在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

这可能有意义,但我想知道为什么我不能拥有一个带指针的指针(在构造函数中)

4 个答案:

答案 0 :(得分:2)

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

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

需要重写为

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

答案 1 :(得分:2)

Cake* cake();

此处cake不是您可能认为的变量。编译器看起来好像cake()是一个返回Cake*并且不带参数的前向声明。

可以,

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

答案 2 :(得分:1)

这是正确的C ++语法:

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

答案 3 :(得分:1)

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

// player.h

class Cake;

class Player
{
  private:
    Cake* m_cake;
  public:
    Player( Cake* c ) : m_cake(c) {}
};