不改变值

时间:2015-11-17 22:13:14

标签: c++ sfml

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

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

(l,t等......来自'for'循环。)

没有任何变化,数值仍为0。

以下是.setTexture(..)的代码:

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

当我创建测试图块时,此代码完全正常工作。

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

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

我怀疑问题来自于此(同样适用于map class,每个人都有一个std::vector<layer>和类似的功能 - &gt;):

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

它是否从我班级或副本中归还std::vector<layer>?如果它是副本,则可以解释该图块的纹理编号保持不变。

如果它是副本,我如何从另一个类改变tile.numTexture?指针?参考文献?(我真的不明白这个)

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

1 个答案:

答案 0 :(得分:6)

功能

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

返回副本,最后修改副本的内容。

更改它以返回参考。

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

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