Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在不使用动态阵列的情况下,阵列初始化出现问题_C++_Arrays_Initialization - Fatal编程技术网

C++ 在不使用动态阵列的情况下,阵列初始化出现问题

C++ 在不使用动态阵列的情况下,阵列初始化出现问题,c++,arrays,initialization,C++,Arrays,Initialization,大家好,我希望能在这段代码上得到一些帮助,我一直有问题。很抱歉搞得一团糟,但我一直在一遍又一遍地重新撰写这篇文章,寻找解决方案。 所以这里是交易,我试图硬编码一个数组内的类a.k.a“mLevelDesign”。所以我可以把它传递给mMapBuffer每当我需要更新“地图”。我的问题是,我觉得这对我自己来说太难了,但我已经尝试创建了数组的第三个实例,这样我在标题中从private中删除了mLevelDesign,并添加了say mCopyLevel,然后在构建地图时将mLevelDesign传递

大家好,我希望能在这段代码上得到一些帮助,我一直有问题。很抱歉搞得一团糟,但我一直在一遍又一遍地重新撰写这篇文章,寻找解决方案。 所以这里是交易,我试图硬编码一个数组内的类a.k.a“mLevelDesign”。所以我可以把它传递给mMapBuffer每当我需要更新“地图”。我的问题是,我觉得这对我自己来说太难了,但我已经尝试创建了数组的第三个实例,这样我在标题中从private中删除了mLevelDesign,并添加了say mCopyLevel,然后在构建地图时将mLevelDesign传递给mCopyLevel,然后在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;
    }
}
//Map.h
#ifndef图
#定义映射
类图
{
公众:
Map();
无效更新();
void drawMap();
私人:
内部设计[100];
int*mMapBuffer;
int-mMapX;
int-mMapY;
int mPlayerX;
内部就业;
布尔·姆博斯戴德;
布尔·梅内姆死了;
布尔·梅内梅死了;
布尔姆特雷苏尔被洗劫一空;
};
#endif//MAP\u H
//Map.cpp
#包括
#包括“Map.h”
使用名称空间std;
Map::Map()
{
mMapX=10;
mMapY=10;
mPlayerX=6;
就业人数=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=假;
mEnemy1Dead=false;
mEnemy2Dead=false;
mtreasurebooted=false;
}
void Map::update()
{
//从映射副本重新绘制缓冲区
mMapBuffer=新整数[0];
int arraySize=mMapX*mMapY;
for(int i=0;i{cout您不能这样做。要么将初始化放在构造函数初始值设定项列表中,要么在字段之后手动设置字段,要么创建一个临时数组并将其添加到实际数组中

由于尺寸的原因,我推荐最后一种:

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

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

    ...
}

我相信在我之前的尝试中,我有一个副本,其他人都试图从中获取信息,但它被丢弃了,所有人都在一个不再存在的地方寻找它。