C ++ - 创建指向包含指向类对象的指针的数组元素的指针

时间:2016-09-02 11:23:29

标签: c++ arrays pointers

我是C ++和编程的新手,我正在尝试通过创建一种游戏来学习。我找不到任何有关如何实现我需要做的信息。 我创建了以下代码,我相信在堆中创建类Player的新对象,并在数组中创建指向这些对象的指针。

int playerObjects(int n, int gameMode)
{
    Player* playerArray = new Player[n];
    for (int i = 0; i < n; i++)
    {
        playerArray[i].balance = 50;
        playerArray[i].score = 0;
        playerArray[i].playerNum = (i+1);
        int m = (i+1);
        playerArray[i].playerName = playerArray[i].playerN(m);
        string playerNam = playerArray[i].playerName;
        playerArray[i].playerAge = playerArray[i].playerA(playerNam);
        playerArray[i].teamNum = 0;
    }
}

其中n是玩家数量(1-4)。 我自己创建的课程Player: 我现在要做的是返回调用函数main(),并且仍然能够访问和修改这些对象。我无法弄清楚如何。我试图创建指向数组中每个元素的指针,如下所示:

Player** pOne = playerArray[0];
Player** pTwo = playerArray[1];
Player** pThree = playerArray[2];
player** pFour = playerArray[3];

我认为pOne是指向类Player(数组元素)对象的指针,但是,这会引发错误: cannot convert 'Player' to 'Player**' in initialization

这样做会抛出相同的错误,但是在赋值而不是初始化(显然):

Player** pOne;
pOne = playerArray[0];

我该怎么办? 并且,一旦我完成了它,我如何将它从main()传递给其他需要访问这些功能的函数? 全局声明数组会更好吗?

由于

3 个答案:

答案 0 :(得分:0)

该函数必须返回(作为返回值或作为引用参数)指向所创建数组的第一个元素的指针。因此,在main中,您可以将指针与下标运算符一起使用。

或者更好的方法是使用标准容器std::vector<Player>并从函数返回它。

答案 1 :(得分:0)

最简单的方法可能就是返回指针。

Player* playerObjects(int n, int gameMode)
{
    Player* playerArray = new Player[n];
    ...
    return playerArray;
}

或者,如果要将返回值保持为int,则可以将指针传递给指向该函数的指针。然后,您可以在指定的指针中创建数组。

int playerObjects(int n, int gameMode, Player** playerArray)
{
    *playerArray = new Player[n];
    for (int i = 0; i < n; i++)
    {
        *playerArray[i].balance = 50;
        *playerArray[i].score = 0;
    ...
    }
}

您可以通过执行以下操作来调用此函数:

Player* playerArray;
playerObjects(n, gameMode, &playerArray)

然后像往常一样访问playerArray的项目:

playerArray[0].xyz;

请不要忘记,在使用new []分配内存后,您需要在删除[]时将其删除。

答案 2 :(得分:0)

playerArray [0]将返回Player类型的对象,因此您正在进行的类型转换操作不正确。 如果你想在main()中使用这个数组,那么你可以从函数playerObjects()返回playerArray。