C++ C++;类成员丢失在成员函数中指定的值
我有一个问题,私有类成员不持有成员函数中分配给他们的值 我将mMapWidth和mMapHeight值初始化为0,然后在load方法中将它们更新为5。此后不久,我调用了draw方法,但在for测试中,mMapWidth和mMapHeight的值为0,mMapCells为空 我按如下方式指定WorldMap对象: main.hC++ C++;类成员丢失在成员函数中指定的值,c++,C++,我有一个问题,私有类成员不持有成员函数中分配给他们的值 我将mMapWidth和mMapHeight值初始化为0,然后在load方法中将它们更新为5。此后不久,我调用了draw方法,但在for测试中,mMapWidth和mMapHeight的值为0,mMapCells为空 我按如下方式指定WorldMap对象: main.h WorldMap worldMap; main.cpp WorldMap worldMap(graphics, &camera, &textureTile
WorldMap worldMap;
main.cpp
WorldMap worldMap(graphics, &camera, &textureTileset);
worldMap.load();
worldMap.draw();
WorldMap对象的声明和定义如下:
世界地图
class WorldMap
{
public:
WorldMap();
WorldMap(Graphics*, Camera*, TextureManager*);
~WorldMap();
void draw();
void load();
private:
int mMapWidth = 0;
int mMapHeight = 0;
Graphics* pGraphics;
TextureManager* pTileSet;
Camera* pCamera;
};
世界地图
WorldMap::WorldMap(){}
WorldMap::WorldMap(Graphics* graphics, Camera* camera, TextureManager* tileset)
{
pGraphics = graphics;
pCamera = camera;
pTileSet = tileset;
mMapHeight = 0;
mMapWidth = 0;
}
WorldMap::~WorldMap(){}
void WorldMap::draw()
{
for (int tileY = 0; tileY < mMapHeight; ++tileY)
{
for (int tileX = 0; tileX < mMapWidth; ++tileX)
{
mMapCells[tileX + (tileY * mMapWidth)].draw();
}
}
}
void WorldMap::load()
{
mTileSize = 32;
mMapWidth = 5;
mMapHeight = 5;
mMapCells.reserve(mMapWidth * mMapHeight);
for (int tileY = 0; tileY < mMapHeight; ++tileY)
{
for (int tileX = 0; tileX < mMapWidth; ++tileX)
{
Cell* cell = new Cell();
cell->initialize(pGraphics, 32, 32, 5, pTileSet);
cell->setX(tileX * 32);
cell->setY(tileY * 32);
cell->setCurrentFrame(1);
mMapCells.push_back(*cell);
}
}
}
WorldMap::WorldMap(){}
WorldMap::WorldMap(图形*图形,相机*相机,纹理管理器*瓷砖集)
{
pGraphics=图形;
pCamera=摄像机;
pTileSet=tileset;
mMapHeight=0;
mMapWidth=0;
}
世界地图::~WorldMap(){}
void WorldMap::draw()
{
对于(int tileY=0;tileY初始化(pGraphics,32,32,5,pTileSet);
cell->setX(tileX*32);
单元->设置(直到*32);
单元->设置当前帧(1);
mMapCells.向后推_(*单元格);
}
}
}
谢谢您的关注。试试这个
从main.h更改此行
WorldMap worldMap;
到WorldMap*WorldMap代码>
in main.cpp
这样做
worldMap = new WorldMap(graphics, &camera, &textureTileset);
worldMap->load();
worldMap->draw();
首先,您只需定义两次世界地图,首先在main.h中,然后在main.cpp中。
但是,您只需要一张全球世界地图,您可以在主地图中这样写。h:
外部世界地图
然后,包含main.h的其他文件可以根据您的意愿使用此全局世界地图。我猜您正在两个不同的实例上调用load
和draw
。请向我们展示所使用的WorldMap
的声明,以及您在其中调用方法的位置。“不久之后”?在这两者之间发生了什么?我希望发生的事情是您希望worldMap
是全局的,因为您在main.h
中声明了它。是的,这个例子是全球性的。但是,它与您稍后使用不同的构造函数声明的不一样。非常感谢你。我没有意识到我正在声明一个相同类型的本地对象。我没有选择这个作为答案,因为extern
与手头的案例没有直接关系-worldMap只在main中使用。但谢谢你的时间和专业知识。