我正在尝试使用this
将类作为参数发送给构造函数,并且在两个不同的类CasinoDealer
和Gambler
中这样做,所以在接收器端StandAction
我有一个构造函数,它接受2个参数performer
和hand
。
Performer是类,但是我有一个自变量CasinoDealer
和Gambler
都继承的基类。 Player
基类。
我认为,由于Gambler
类或CasinoDealer
类继承了Player
基类,因此我可以使用this
发送该类,并且接收端具有{ {1}}作为参数,并知道哪个类创建了对象,但是显然这是行不通的,那么我该怎么做?
我省略了一些包含和不重要的功能,以最大程度地减少发布的代码。
Gambler.cpp
Player* performer
Player.h
Action* Gambler::GetAction(int input) {
Action* action = nullptr;
switch (input) {
case 1:
action = new StandAction(this, new Hand());
break;
default:
break;
}
return action;
}
StandAction.h
class Player {
public:
virtual Action* DecideNextMove() = 0;
};
StandAction.cpp
class StandAction : public Action {
public:
StandAction(Player* performer, Hand hand);
void Execute();
};
它抱怨没有构造函数的实例匹配参数列表。我认为,如果我发送的类继承了StandAction::StandAction(Player* performer, Hand hand) : Action(performer, hand) {
}
,可以将其作为参数传递,并且在接收者端使用Player
。
Player* performer
答案 0 :(得分:2)
嗯,这个错误对我来说很清楚。 new Hand()
返回Hand*
,而不是Hand
构造函数所需的StandAction
。因此,您可能想要new StandAction(this,Hand());
请不要使用new
,请使用std::unique_ptr<T>
并按值返回std::unique_ptr<Action>
。除非您知道自己在做什么,否则最好只对未拥有的关系使用原始指针。
编辑:使用unique_ptr
:
std::unique_ptr<Action> Gambler::GetAction(int input) {
std::unique_ptr<Action> action;
switch (input) {
case 1:
action = std::make_unique<StandAction>(this, Hand());
break;
default:
break;
}
return action;
}
由于在两种情况下都将StandAction*
投射到Action*
,因此请确保Action::~Action()
是虚拟的。