繁体   English   中英

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

[英]C++ - Creating pointers to elements of an array containing pointers to class objects

我是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()传递给也需要访问它们的其他函数? 全局声明数组会更好吗?

谢谢

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

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

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

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 []分配了内存后,完成后需要使用delete []将其删除。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM