我得到一个非常奇怪的错误,在我离开for
范围之后,即使在类头中声明了包含对象的数组,我也无法访问指针在循环期间指向的任何内容。 / p>
这是代码的基础:
Class CTile{ /*Code*/ };
Class CMap
{
public:
CTile** tiles;
CMap();
}
CMap::CMap()
{
int lines = 10;
int cols = 10;
tiles = new CTile*[lines];
for(int i = 0 ; i (lower than) lines;++)
{
this->tiles[i] = new CTile[cols];
}
for(int curLine = 0; curLine (lower than) lines ; curLine++)
for(int curCol = 0; curCol (lower than) cols; curCol++)
{
CTile me = this->tiles[curLine][curCol];
me.setType(1);
//do whatever I need, and inside the loop everything works.
}
int a = this->tiles[2][2].getType(); // a gets a really weird number
this->tiles[2][2].setType(10); // crashes the program
}
有谁知道可能出现什么问题?
答案 0 :(得分:4)
CTile me = this->tiles[curLine][curCol];
那应该是
CTile& me = this->tiles[curLine][curCol];
me.setType(1);
为什么呢?因为您制作了CTile的副本,而不是创建对二维数组中的一个的引用。您现在可能会发现崩溃已移至me.setType(1)
语句。
答案 1 :(得分:4)
CTile me = this->tiles[curLine][curCol];
这是问题所在。 me
是原始对象tiles[curLine][curCol]
的副本,因此无论您使用me
做什么都不会反映在原始对象中。即使您执行me.setType(1)
,原始对象仍保持不变。我相信你不想那样。
所以修复是:使用引用:
CTile & me = this->tiles[curLine][curCol];
// ^ note this
me.setType(1);
或者更好的是,您可以这样做:
tiles[curLine][curCol].setType(1); //"this" is implicit!