为什么调整大小的 2D 矢量会重置我的数据
Why does my resized 2D vector reset my data
我正在尝试将对象保存在 2D 矢量中。需要在运行时调整矢量的大小。因此,我使用许多其他问题中提到的调整大小功能。
她是我问题的分解代码示例。所以代码可能没有意义,但我得到同样的错误。
动画.h
class myPoint{
public:
int x, y;
myPoint(){}
myPoint(int x, int y) : x(x), y(y) {}
};
class AnimationFrame {
private:
std::vector<std::vector<myPoint>> sprites; //the important part
public:
void addSpritePoint(myPoint gridPos, myPoint tilePos);
...
};
class Animation {
private:
std::vector<AnimationFrame*> animationFrames;
public:
...
};
动画.cpp
Animation::Animation() {}
int Animation::addAnimationFrame() {
AnimationFrame *newAnimationFrame = new AnimationFrame();
this->animationFrames.emplace_back(newAnimationFrame);
}
//AnimationFrame class
AnimationFrame::AnimationFrame(){
int w = 3; //just for the test
int h = 3;
this->sprites.resize(w, std::vector<myPoint>(h, myPoint(0,0)));
}
void AnimationFrame::addSpritePoint(myPoint gridPos, myPoint tilePos) {
this->sprites[gridPos.x][gridPos.y] = tilePos;
//printf(""); //breakpoint here
}
主.cpp
int main() {
Animation *a = new Animation();
a->addAnimationFrame();
a->getAnimationFrame(0).addSpritePoint(myPoint(0,0), myPoint(1,1));
a->getAnimationFrame(0).addSpritePoint(myPoint(0,1), myPoint(2,2));
a->getAnimationFrame(0).addSpritePoint(myPoint(0,2), myPoint(3,3));
}
我希望我的 AnimationFrame 类中的精灵 2D 矢量包含这些值。当第一个断点在 Point(1,1) 中启动时,Point(1,1) 在精灵 (0,0) 中,但当我现在跳到下一个断点时,精灵 (0,0) 中的值再次为 (0,0)。因此,它会重置值。我不知道为什么。
问题来自Animation::getAnimationFrame()
返回其内部数据的副本:
AnimationFrame Animation::getAnimationFrame(int frame) const;
因此,这会修改一个临时对象,并且在计算完整表达式后不起作用:
a->getAnimationFrame(0).addSpritePoint(myPoint(0,0), myPoint(1,1));
修复很简单:通过引用返回:
const AnimationFrame& Animation::getAnimationFrame(int frame) const
{
return *animationFrames[frame];
}
AnimationFrame& Animation::getAnimationFrame(int frame)
{
return *animationFrames[frame];
}
(是的,您需要一个常量和非常量版本)
相关文章:
- 我的头文件 DNode 中的我的数据类型未被识别为数据类型
- 遍历我的数据结构,并向其中输入随机值
- 为什么操作系统正在更改我的数据包的指定传出端口
- 我的数据结构的最佳序列化方法
- 为什么我的数据/输出文件为空?
- 为什么调整大小的 2D 矢量会重置我的数据
- 为什么我的数据不适合CUDA纹理对象
- C 使用与自定义类对象的列表容器,列表:: Sort函数实际上并未对我的数据进行排序
- 为什么我的数据无法在信号/插槽的表格之间传输
- 为什么返回数据结构而不是指针弄乱了我的数据的完整性
- 使用boost :: iterator_range;我的数据在哪里范围
- 为什么我的数据流在20或30行后开始重复
- C++:如何使用冒泡排序来重新排列我的数据
- 如何将自动递增的主键的数据从 sql 服务器获取到我的数据网格视图
- 如何将 0(且仅 0)转换为我的数据结构
- C++模来对齐我的数据
- 谁应该有一个迭代器,我的数据类或该类中的实际列表
- 如何只训练我的数据一次
- COM互操作传递了错误的指针,我的数据只有一个字节
- 当从c++传递缓冲区到NodeJS时,我的数据消失了