尽管直接设置了指针数组,但仍为空
Array of pointers remaining null despite being directly set
我有一个长度为 [sizeX][sizeY] 的 2d 数组中的"单元格"对象列表。这些Cell
对象包含一个类型*Cell
的数组,该数组应以北、东、南、西(永远不要吃湿漉漉的华夫饼(的格式指向每个给定单元格的相邻单元格。
这个数组称为compass
,长度定义为4。初始化单元格后(此时compass
的所有值都设置为nullptr
(,我有一个循环,它试图用指向附近相应单元格的指针填充Cell.compass
。
但是,我发现尽管如此,在每个单元格中,我发现compass
仍然充满了空值。
在这个循环中,我还运行了一个函数Cell::computeTopology()
该函数填充compass
的有效非空索引的向量(这是Cell
的属性(。这同样是空的。
在调用此函数之前和之后,我都做了一个断点,效果完全相同。无论如何,我也会包括这个函数。我非常困惑,在这里提供一些帮助将不胜感激。
问题区域:
const int sizeX = SCREEN_WIDTH / SCALE;
const int sizeY = SCREEN_HEIGHT / SCALE;
Cell cells[sizeX][sizeY];
for (int x = 0; x < sizeX; x++){
for (int y = 0; y < sizeY; y++){
cells[x][y].setPos(x, y);
cells[x][y] = Cell();
//cells[x][y].setColor(rand() % 255, rand() % 255, rand() % 255);
}
}
for (int x = 0; x < sizeX; x++) {
for (int y = 0; y < sizeY; y++) {
Cell c = cells[x][y];
if (x - 1 >= 0) {
c.compass[3] = &cells[x - 1][y];
}
if (x + 1 < (SCREEN_WIDTH / SCALE)) {
c.compass[1] = &cells[x + 1][y];
}
if (y - 1 >= 0) {
c.compass[0] = &cells[x][y - 1];
}
if (y + 1 < (SCREEN_HEIGHT / SCALE)) {
c.compass[2] = &cells[x][y + 1];
}
c.computeTopology();
}
}
和computeTopology()
功能
void Cell::computeTopology()
{
int i = 0;
for (Cell *c : compass) {
if (c != nullptr) {
notNull.push_back(i);
i++;
}
}
}
更改
Cell c = cells[x][y]; // make a copy
自
Cell& c = cells[x][y];
您要修改数组项,而不是复制。
另一个问题
cells[x][y].setPos(x, y);
cells[x][y] = Cell(); // ?
您通过调用setPos
来设置cells[x][y]
的某些成员,之后您将覆盖cells[x][y]
默认情况下构造Cell
对象。我认为应该删除上面代码中的第二行。
你的话
填充指南针的有效非空索引的向量(这是 Cell 的属性(
因此i
索引应该随着 for 循环的每次迭代而前进:
int i = 0;
for (Cell *c : compass) {
if (c != nullptr) {
notNull.push_back(i);
}
++i; // moved
}
相关文章:
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”