在不使用动态数组的情况下初始化数组时出现问题
Having issues with array initialization without using dynamic array
大家好,我希望能得到一些关于这段我遇到问题的代码的帮助。很抱歉搞砸了,但我一直在一遍又一遍地重写这篇文章,寻找解决方案。所以这是一个交易,我试图在一个名为"mLevelDesign"的类中硬编码一个数组。因此,每当我需要更新"map"时,我可以将它传递给mMapBuffer。我的问题是,我觉得这对我自己来说要困难得多,但我已经尝试创建该数组的第三个实例,因此我在标头中从private中删除了mLevelDesign,并添加了mCopyLevel,然后在构造Map时将mLevelDesign传递到mCopyLevel中,然后在mLevelDesign的位置使用mCopyLevel。尽管我似乎已经失去了很多记忆和其他问题运行的方式。我只是想知道,是否有一些简单的方法可以对数组进行硬编码,同时仍将其列在头文件中,甚至更好地避免在内存中丢失它?截至目前,此代码引发错误:无法在赋值中将"brace enclosed initializer list"转换为"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++使用整数的压缩数组初始化对象
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 字节数组初始化会导致 DirectX 崩溃
- 使用 new 和 值进行数组初始化,但没有显式数量的元素
- 运行时C++数组初始化问题
- 使用带有参数包的数组的成员数组初始化类
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- C++ 2 个指针数组初始化 C2440
- C++结构字符数组初始化
- C++中的多维数组初始化
- constexpr数组初始化
- C++引物动态数组初始化程序的数目超过大小
- 使用std::index_sequence对std::数组初始化进行包扩展
- 当 std 数组初始化太小时,C++会引发错误吗?
- 如何确定结构数组初始化的大小?
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- 此代码中的数组初始化样式是什么?这是标准的吗?
- C++ 使用数组初始化时的 STL 向量内存管理