【发布时间】:2011-10-31 09:12:09
【问题描述】:
我有以下代码:
void CScriptTable::EnumReferences(asIScriptEngine *engine)
{
if (m_table)
{
// Call the gc enum callback for each nested table
size_t col = 0, row = 0, num_cols = m_table->numCols(), num_rows = m_table->numRows();
for( col; col < num_cols; col++ ) // Line 92
{
if (m_table->getColType(col) == COL_TABLE) {
for (row; row < num_rows; row++){ // Line 95
Table * tbl = m_table->getTable(row, col);
engine->GCEnumCallback(tbl);
}
}
}
}
}
编译时,(g++),第92&95行发出警告(声明无效)(上面sn-p中表示)
即使我已经盯着它看了一段时间,我也不明白为什么它们没有效果 - 可以用第二双眼睛看看他们是否能发现我错过的东西。
【问题讨论】:
-
拆分你的变量声明。那条线太疯狂了。你为什么要在循环之外声明你的循环变量呢?不要那样做。
-
您的代码中有一个细微的错误。
row在进入col循环之前被设置为 0 一次,之后永远不会重置。因此,在外部 (col) 循环的第一次迭代中,您确实对行进行了迭代,但对于所有其他迭代,您什么也不做。请参阅@b.buchhold 的答案,它解决了您的原始问题和这个错误......并学习在尽可能紧凑的范围内声明您的变量。
标签: c++