无法从' Player *'转换参数1到玩家' C ++

时间:2014-05-29 11:30:07

标签: c++

首先,我对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个新问题。

希望你们能帮助我。

如果您需要我可以链接全班,但不确定您是否需要它。

3 个答案:

答案 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();