在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
。
这可能有意义,但我想知道为什么我不能拥有一个带指针的指针(在构造函数中)。
答案 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) {}
};