Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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++ 如何将具有二维char向量的类转换为具有char变量的另一个obj的二维向量?_C++_Class_Object_Implementation_2d Vector - Fatal编程技术网

C++ 如何将具有二维char向量的类转换为具有char变量的另一个obj的二维向量?

C++ 如何将具有二维char向量的类转换为具有char变量的另一个obj的二维向量?,c++,class,object,implementation,2d-vector,C++,Class,Object,Implementation,2d Vector,我还是个新手,所以如果我为我的问题提供了太多或太少的信息,我会提前道歉 故障 这个问题不是一个类似于流氓的游戏相关问题,而是关于我的程序的一些背景知识。。是一款类似于流氓的游戏 好的,我有一个类,它有一个成员2D字符向量(这些字符被操纵来表示一个“地牢”)。一切都天衣无缝。我想扩展我的程序所能做的,所以我决定创建一个新类来替换字符的2D向量,以便字符只是新类的可视表示,其他变量可以与该字符一起存储 为了简单起见,我试图删除这个问题不需要的内容。这个新的类被称为平铺——它表示一个用于地下城级别的

我还是个新手,所以如果我为我的问题提供了太多或太少的信息,我会提前道歉


故障

这个问题不是一个类似于流氓的游戏相关问题,而是关于我的程序的一些背景知识。。是一款类似于流氓的游戏

好的,我有一个类,它有一个成员2D字符向量(这些字符被操纵来表示一个“地牢”)。一切都天衣无缝。我想扩展我的程序所能做的,所以我决定创建一个新类来替换字符的2D向量,以便字符只是新类的可视表示,其他变量可以与该字符一起存储

为了简单起见,我试图删除这个问题不需要的内容。这个新的类被称为平铺——它表示一个用于地下城级别的空间平铺具有:

  • 一个名为displayChar.的char变量。。默认设置为“”以表示其包含的内容

  • (其他变量…)


问题/我糟糕的猜测

我并不擅长完全理解编程语法/实现的一些概念,所以请不要妄下判断

  • 按照填充字符向量的方式,我将其调整为游戏板的宽度,并将所有值都设置为“”,因为所有值都是字符
  • 我想我需要用新的、平铺的对象填充它,并将它们推到 二维平铺向量

  • 我的其他操纵char值的方法给出了错误

  • 我想我应该改变方法,将指针指向磁贴 对象,并使用setDisplayChar(“”)方法更改其属性 价值

  • 我的at(int,int)方法用于返回该位置的字符

  • 我原以为可以将其更改为“return m_vvvtiles[y][x].getDisplayChar()”,但出现了一个错误
我不善于改变某些东西的工作方式,通常会把代码弄得一团糟。我将发布与此相关的代码。我非常感谢你能提供的任何帮助。如果我需要添加更多,请告诉我。(我将尽量使代码最小化,只使用相关的方法)。谢谢


地下城等级.h

#include "Tile.h"
#include <vector>
#include <random>

class DungeonLevel {
public:
    DungeonLevel(int iWidth, int iHeight, std::mt19937 & mt);
    ~DungeonLevel(void);

    void dump();
    char at(int x, int y);

    int getWidth();
    int getHeight();

private:
    std::vector<std::vector<Tile>> m_vvTiles; //Tile was char

};
#include "Entity.h"
#include <vector>

class Tile : public Entity {
public:
    Tile(void);
    virtual ~Tile(void);
    //void setEntity(Entity * entityToSet); BOTH IRRELEVANT
    //Entity * getEntity();
    void setDisplayChar(char displayCharToSet);
    char getDisplayChar();
    //virtual void dumpObjectData(); IRRELEVANT AT THIS TIME


private:
    char displayChar;
    //Entity * theEntity; IRRELEVANT AT THIS TIME
};

*以下是我现有的错误:*


对于dump()方法,在DungeonLevel.cpp中,

您的一些问题和我的答案

我想我需要用新的平铺对象填充它,并将它们推到2D平铺向量

不,您需要调整它的大小并用平铺对象填充它。就像你在使用字符数组时做的一样。这里面没有新的东西

我想我应该更改方法,以获取指向Tile对象的指针,并使用setDisplayChar(“”)方法更改其值

我会用推荐信

我想我可以将其更改为
return m_vvvtiles[y][x].getDisplayChar()
,但我得到了一个错误

听起来不错,你犯了什么错误


我觉得你重新设计的一切都很有动力。不过,在进行重大重组之前进行备份是个好主意。

您的一些问题和我的答案

我想我需要用新的平铺对象填充它,并将它们推到2D平铺向量

不,您需要调整它的大小并用平铺对象填充它。就像你在使用字符数组时做的一样。这里面没有新的东西

我想我应该更改方法,以获取指向Tile对象的指针,并使用setDisplayChar(“”)方法更改其值

我会用推荐信

我想我可以将其更改为
return m_vvvtiles[y][x].getDisplayChar()
,但我得到了一个错误

听起来不错,你犯了什么错误


我觉得你重新设计的一切都很有动力。不过,在进行重大重组之前进行备份是个好主意。

您当前遇到的错误是什么?大量关于无法从字符转换为类型平铺的行以及一系列说明符错误。它给出了大约100行的错误,您当前得到的错误是什么?关于无法从char转换为type Tile的大量错误,以及一系列说明符错误。它给出了大约100行的错误提示,这绝对有帮助。我也得到了关于没有调整瓷砖大小的错误?当需要1个参数时,我要传递2个参数。(我假设它在构造函数的第一个for循环中)返回getDisplayChar的错误可能是由另一个问题引起的。嗯,我刚刚注意到Tile来自实体。如果您打算使用多态性,那么应该使用指针向量而不是对象向量。但是将其搁置一分钟是一个错误,因为第二个参数的类型应该是Tile而不是char。我建议使用
(*it).resize(iWidth,Tile(“”))
,但这将要求您为Tile编写一个构造函数,该构造函数采用char参数
Tile::Tile(char ch){displayChar=ch;}
。听起来这可能是个好主意。好的,谢谢,我试试。是的,Tile(最终)能够保存一个指向实体obj的指针,以及它的displayChar和其他值。基本上,这样瓷砖就可以显示它可能包含的内容(比如一个项目)。我这样做了,它消除了大部分错误。现在,当我试图向控制台显示字符时,方法dump()中出现了一个错误。我已经用代码和错误消息更新了我的问题。这只是一个运算符优先级错误
cout谢谢,这绝对有帮助。我也得到了关于没有调整瓷砖大小的错误?当需要1个参数时,我要传递2个参数。(我假设它在构造函数的第一个for循环中)返回getDisplayChar的错误可能是由
#include "Entity.h"
#include <vector>

class Tile : public Entity {
public:
    Tile(void);
    virtual ~Tile(void);
    //void setEntity(Entity * entityToSet); BOTH IRRELEVANT
    //Entity * getEntity();
    void setDisplayChar(char displayCharToSet);
    char getDisplayChar();
    //virtual void dumpObjectData(); IRRELEVANT AT THIS TIME


private:
    char displayChar;
    //Entity * theEntity; IRRELEVANT AT THIS TIME
};
#include "Tile.h"
#include "Entity.h"

using namespace std;

Tile::Tile(void){
    displayChar = '.';
    //theEntity = NULL;
}


Tile::~Tile(void){

}

void Tile::setDisplayChar(char displayCharToSet){
    displayChar = displayCharToSet;
}

char Tile::getDisplayChar(){
    return displayChar;
}