gpt4 book ai didi

c++ - 不改变值的函数

转载 作者:行者123 更新时间:2023-11-30 00:47:47 26 4
gpt4 key购买 nike

我正在编写一个 2D 引擎,这是我的问题:每个瓷砖都有一个“纹理”数字(0:网格,1:草,等等......)当我尝试像这样更改数字时:

maps[currentMapID].getLayerArray()[l].getTileArray()[t].setTexture(currentSelectedTexture);

(l、t 等...来自“for”循环。)

没有变化,numero 仍然是 0。

这里是.setTexture(..)的代码:

void tile::setTexture(int t)
{
numTexture = t;
}

当我创建测试图 block 时,这段代码完全有效。

我的代码(类)的结构是:

Map > layer > tile. => all of them in a class wich handle graphics.

我怀疑问题来自于此(对于 map class 也是如此,它们每个都有一个 std::vector<layer> 和类似的功能 -> ):

std::vector<tile> layer::getTileArray()
{
return tiles;
}

它是否返回给我 std::vector<layer>来 self 的类(class)或拷贝?如果它是拷贝,则可以解释图 block 的纹理编号保持不变。

如果是拷贝,我该如何更改 tile.numTexture来自另一个类(class)??指针?引用资料?(这个我不是很懂)

我也检查了 currentSelectedTexture那里没有问题。

最佳答案

函数

std::vector<tile> layer::getTileArray()
{
return tiles;
}

返回一个拷贝,你最终修改了拷贝的内容。

更改它以返回引用。

std::vector<tile>& layer::getTileArray()
{
return tiles;
}

如果函数 getLayerArray() 具有类似的签名,您也需要更改它。

关于c++ - 不改变值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33768050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com