将对象传递给函数(在Main中定义的对象)

时间:2016-04-20 21:01:02

标签: c++ object

如何将Main中定义的对象传递给函数?

我的main函数如下所示:

// Initialising the players
Player Joe;
Player Sid;

Joe.setPlayerName("Joe");
Sid.setPlayerName("Sid");

Joe.setPercentage(71);
Sid.setPercentage(73);

Joe.setTotal(501);
Sid.setTotal(501);

Joe.setThrows(0);
Sid.setThrows(0);


// Starts Joe's turn (and the game)
turn(Joe);

在另一个名为calculateTotal的函数中,我有以下代码部分:

else if (potentialTotal < 2 && potentialTotal != 0)
{
    potentialTotal = total; // Total remains the same
    player.setThrows(0); // Resets their throws

    // Switch player's turn
    if (player.getPlayerName() == "Joe")
    {
        turn(Sid);
    }
    else if (player.getPlayerName() == "Sid")
    {
        turn(Joe);
    }
}

问题是Sid中的turn(Sid)以及Joe中的turn(Joe)不起作用,这是因为它们是在main中声明的不是calculateTotal功能。

我已经通过了Player对象,例如calculateTotal函数 - player.getPlayerName(),但如果我放turn(player),则会调用turn(Joe)当他先行而不是我需要的时候,我需要切换到Sid

程序中的功能。

void turn(Player& player);

void bullseye(Player& player);

void singleThrow(int requiredValue, Player& player);
void doubleThrow(int dartThrow, Player& player);
void trebleThrow(int dartThrow, Player& player);

void calculateTotal(Player& player);

这是错误:

1>f:\abertay\programming\coursework\coursework\source.cpp(149): error C2065:    'Sid' : undeclared identifier
1>f:\abertay\programming\coursework\coursework\source.cpp(153): error C2065: 'Joe' : undeclared identifier
1>f:\abertay\programming\coursework\coursework\source.cpp(169): error C2065: 'Sid' : undeclared identifier
1>f:\abertay\programming\coursework\coursework\source.cpp(173): error C2065: 'Joe' : undeclared identifier

1 个答案:

答案 0 :(得分:0)

传递参考

如果您在main中创建对象并且不想要对象的副本(看起来就是这种情况),请将引用传递给main中的对象你的calculations功能:

void calculations(Player& Joe, Player& Sid)
{
    //...
    else if (potentialTotal < 2 && potentialTotal != 0)
    {
        potentialTotal = total; // Total remains the same
        player.setThrows(0); // Resets their throws

        // Switch player's turn
        if (player.getPlayerName() == "Joe")
        {
            turn(Sid);
        }
        else if (player.getPlayerName() == "Sid")
        {
            turn(Joe);
        }
    }
    //...
}

如果您不熟悉,引用只是对象的另一个名称,它不会复制您的Player对象,而是calculations函数将引用{{1}中的对象功能。