gpt4 book ai didi

c++ - 在不使用动态数组的情况下进行数组初始化时出现问题

转载 作者:行者123 更新时间:2023-11-28 07:15:01 25 4
gpt4 key购买 nike

大家好,我希望能就我一直遇到问题的这段代码获得一些帮助。抱歉弄得一团糟,但我一直在一遍又一遍地重写这篇文章以寻找解决方案。所以这就是交易,我正在尝试在类 a.k.a“mLevelDesign”中对数组进行硬编码。所以每当我需要更新“ map ”时,我都可以将它传递给 mMapBuffer。我的问题是感觉我让自己变得更难,然后需要,但我已经尝试创建数组的第三个实例,以便我从 header 中的 private 中删除 mLevelDesign 并添加说 mCopyLevel,然后将 mLevelDesign 传递到 mCopyLevel 时 map 构建完成,然后在mLevelDesign 的地方使用mCopyLevel。虽然我似乎已经失去了很多内存和其他运行方式的问题。我只是好奇是否有一些简单的方法能够对数组进行硬编码,同时仍将其列在头文件中,甚至更好但不会在内存中丢失它?截至目前,这段代码抛出错误:无法在赋值中将“大括号括起来的初始化列表”转换为“int”。

//Map.h
#ifndef MAP_H
#define MAP_H

class Map
{
public:
Map();

void update();
void drawMap();

private:
int mLevelDesign[100];
int* mMapBuffer;
int mMapX;
int mMapY;
int mPlayerX;
int mPlayerY;
bool mBossDead;
bool mEnemy1Dead;
bool mEnemy2Dead;
bool mTreasureLooted;
};

#endif // MAP_H


//Map.cpp
#include <iostream>
#include "Map.h"

using namespace std;

Map::Map()
{
mMapX = 10;
mMapY = 10;

mPlayerX = 6;
mPlayerY = 10;

mLevelDesign[100] =
/* 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,10 */
/*1*/ { 0 , 0 , 0 , 0 , 1 ,'D', 1 , 0 , 0 , 0 ,
/*2*/ 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 ,
/*3*/ 1 , 2 , 2 , 2 , 1 , 0 , 1 , 2 , 1 , 0 ,
/*4*/ 1 ,'T','E', 0 , 0 , 0 , 0 ,'F', 1 , 0 ,
/*5*/ 1 ,'B','E', 0 , 0 , 0 , 0 ,'M', 1 , 0 ,
/*6*/ 1 , 2 , 2 , 2 , 1 , 0 , 1 , 2 , 1 , 0 ,
/*7*/ 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 ,
/*8*/ 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 ,
/*9*/ 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 ,
/*10*/ 0 , 0 , 0 , 0 , 1 ,'D', 1 , 0 , 0 , 0 };

mBossDead = false;
mEnemy1Dead = false;
mEnemy2Dead = false;
mTreasureLooted = false;
}

void Map::update()
{
//Re-draw buffer from map copy
mMapBuffer = new int[0];
int arraySize = mMapX * mMapY;
for(int i = 0; i < arraySize; ++i)
{
mMapBuffer[i] = mLevelDesign[i];
}

//Convert player cooordinates to array standard and draw player to map.
int playerConversion = ((mPlayerY - 1) * mMapY) + (mPlayerX - 1);
mMapBuffer[playerConversion] = 'P';

//Check for changes in map.
if(mBossDead == true)
mMapBuffer[41] = 0;

if(mEnemy1Dead == true)
mMapBuffer[32] = 0;

if(mEnemy2Dead == true)
mMapBuffer[42] = 0;
}

void Map::drawMap()
{
int count = 0;
for(int y = 0; y < mMapY; ++y)
{
for(int x = 0; x < mMapX; ++x)
{
if(mMapBuffer[count] == 0)
{cout << " "; count ++;}

else if(mMapBuffer[count] == 1)
{cout << "| "; count ++;}

else if(mMapBuffer[count] == 2)
{cout << "= "; count ++;}

else if(mMapBuffer[count] == 'X')
{cout << "X "; count ++;}

else if(mMapBuffer[count] == 'D')
{cout << "D "; count ++;}

else if(mMapBuffer[count] == 'T')
{cout << "T "; count ++;}

else if(mMapBuffer[count] == 'P')
{cout << "@ "; count ++;}

else if(mMapBuffer[count] == 'M')
{cout << "$ "; count ++;}

else if (mMapBuffer[count] == 'F')
{cout << "F "; count ++;}

else if (mMapBuffer[count] == 'Q')
{cout << "Q "; count ++;}

else if(mMapBuffer[count] == 'E')
{cout << "E "; count ++;}

else if(mMapBuffer[count] == 'B')
{cout << "B "; count ++;}

else
{cout << " "; count ++;}
}
cout << endl;
}
}

最佳答案

你不能那样做。要么将初始化放在构造函数初始化器列表中,要么在字段后手动设置字段,要么创建一个临时数组和 std::copy它到实际的数组。

考虑到大小,我推荐最后一个:

Map::Map()
{
static const int tempLevel[100] = { ... };

std::copy(tempLevel, tempLevel + 100, mLevelDesign);

...
}

关于c++ - 在不使用动态数组的情况下进行数组初始化时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20372507/

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