我是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()传递给其他需要访问这些功能的函数? 全局声明数组会更好吗?
由于
答案 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。