gpt4 book ai didi

c++ - 在不同的文件中定义指针数组长度(C++)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:06:53 25 4
gpt4 key购买 nike

我目前正在制作一款基于控制台的小型游戏。我为敌人、主角和游戏制作了一个类,其中包括绘图、逻辑等,我为它们使用单​​独的文件。

我想做的是在 Game 类 header 中声明一个类 Enemy 的指针数组,然后根据您设法通过的楼层数定义产生多少敌人。我希望我能像这样或类似的方式来做:

游戏.h

CEnemy *en;

游戏.cpp

*en = new CEnemy[currentFloor]

但这当然不起作用..因为我没有在 .h 文件中将其声明为数组。

CEnemy *en[];

也不行。你能给我一些提示吗?

编辑:正如@WhozCraig 建议的那样,我将针对我的问题制作一个示例项目

主要.cpp

#include "stdafx.h"
#include "Game.h"
#include <iostream>

using namespace std;

CGame game();
int main()
{
game.setup();

while (game.GameRunning())
{
game.render();
game.input();
game.logic();
}
game.clear();
return 0;
}

游戏.h

#include "Player.h"
#include "Enemy.h"
class CGame
{
public:
CGame();
~CGame();

void setup();
void render();
void input();
void logic();

bool GameRunning() { return isRunning; };
void clear();
private:
bool isRunning;
int currentFloor = 5;
int stairX, stairY;

bool enDraw(int, int);
void nextLevel();

CPlayer mc;
CEnemy *en; //part of the problem
};

游戏.cpp

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <ctime>
#include "Game.h"

using namespace std;
//i left constructor etc out
void CGame::setup() {
*en = new CEnemy[currentFloor]; //E0349
mc.setX(width / 2);
mc.setY(height / 2);
stairX = rand() % width;
stairY = rand() % height;

for (int i = 0; i < currentFloor; i++)
{
en[i]->setX(stairX + rand() % 5); //E0044
en[i]->setY(stairY + rand() % 5);

if (en[i]->getX() < 0) en[i]->setX(0); if (en[i]->getX() > width - 1) en[i]->setX(width - 1);
if (en[i]->getY() < 0) en[i]->setY(0); if (en[i]->getY() > height - 1) en[i]->setY(height - 1);
}
}

.....

错误信息:
E0349 没有运算符匹配这些操作数
E0044 表达式必须有指针类型
我希望我没有忘记任何事情

最佳答案

What i would like to do is to declare a pointer array of class Enemy inside the Game class header and then define how many enemys spawn depending on how many floors you managed to pass.

如果你想定义一个指针数组,并且你在编译时知道楼层总数,你需要声明

CEnemy * en[NUM_FLOORS];

从右到左读取:一个指向CEnemy 的指针数组(大小为NUM_FLOORS)。然后你可以在特定楼层 n 上创建一些敌人

en[n] = new CEnemy[NUM_ENEMIES_FOR_FLOOR_N];

如果你在编译时不知道NUM_FLOORS,你会声明

CEnemy ** en;

并在运行时创建你的地板

en = new CEnemy*[NUM_FLOORS];

但是,我强烈建议尽可能避免自己管理内存,因为它很容易泄漏内存并且更难推理。你可以看看使用 std::vector相反,它可以根据需要动态增长。

在你的例子中,它可能看起来像

vector<vector<CEnemy>> floors;

然后您可以轻松地添加楼层或修改楼层

// Add a new floor with n enemies
floors.push_back(vector<CEnemy>(n));

// Add a new enemy to floor f (assuming the floor already exists)
floors[f].emplace_back();

关于c++ - 在不同的文件中定义指针数组长度(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48481757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com