首先,我对c ++很新,而且我试着四处寻找,但没有运气。
我正在制作一个Rock,Paper,Scissors游戏作为c ++任务。 在我的主要我想实例化我的obejcts /类 这是我的Main.cpp
#include "Player.h"
#include "Match.h"
#include "ComputerAI.h"
Player* player;
ComputerAI* ai;
Match* match;
int main()
{
player = new Player();
ai = new ComputerAI();
match = new Match(player, ai);
match->StartMatch();
while(true)
{
match->StartNewRound();
}
return 0;
}
我得到的错误是在Match(player,ai)
Error 2 error C2664: 'Match::Match(Player,Player)' : cannot convert parameter 1 from 'Player *' to 'Player'
Match的重载构造函数如下所示:
Match(Player player1, Player player2);
我想我知道错误是什么,因为它基本上说我不能从指针转换为非指针,但我不知道如何解决它。
如果我将构造函数更改为:
Match(Player* player1, Player* player2);
很高兴,但这给了我100个新问题。
希望你们能帮助我。
如果您需要我可以链接全班,但不确定您是否需要它。
答案 0 :(得分:1)
看起来,你真的不需要这里的指针。试试这个:
#include "Player.h"
#include "Match.h"
#include "ComputerAI.h"
int main(int argc, char * argv[])
{
// Avoid global variables. Move them
// as local main variables.
Player player;
ComputerAI ai;
Match match;
match.StartMatch();
while(true)
{
match.StartNewRound();
}
return 0;
}
请注意,如果您接受Player
作为Match
构造函数的参数,那么您将获得传递实例的副本而不是原件,我猜,这不是,你想要什么。尝试:
class Match
{
private:
Player & first;
Player & second;
public:
Match(Player & newFirst, Player & newSecond)
: first(newFirst), second(newSecond)
{
// ...
}
};
答案 1 :(得分:0)
你可以写
match = new Match( *player, ai );
或者如果构造函数的第二个参数也不是指针那么
match = new Match( *player, *ai );
虽然在你的代码中,ai没有类型Player *。
ai = new ComputerAI();
但是我没有看到代码中动态分配播放器的感觉。
答案 2 :(得分:0)
我不能评论,因为我没有足够的声誉吗?但是如果你制作了匹配构造函数,它会给你带来什么错误:
Match(Player* player1, Player* player2)
我怀疑,但要记住,当它指向调用该类函数的指针时,你需要使用 - >运营商。例如,player1->makeMove();