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;
}