C++ C++;类成员丢失在成员函数中指定的值

C++ 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

我有一个问题,私有类成员不持有成员函数中分配给他们的值

我将mMapWidth和mMapHeight值初始化为0,然后在load方法中将它们更新为5。此后不久,我调用了draw方法,但在for测试中,mMapWidth和mMapHeight的值为0,mMapCells为空

我按如下方式指定WorldMap对象:

main.h

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中使用。但谢谢你的时间和专业知识。