我有以下代码:
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行和第9行发出警告(声明无效)。 95(在上面的代码段中指出)
我不明白他们为什么没有效果,即使我已经盯着它看了一会儿 - 可以用第二双眼睛看他们是否能发现我所缺少的东西。
答案 0 :(得分:7)
如果猜测你想迭代所有列,并且遍历所有行。所以最好将代码更改为:
for循环中的第一个语句执行一次,即首先输入循环。由于您希望为所有其他列包含行号零,因此必须为每列设置行0:
void CScriptTable::EnumReferences(asIScriptEngine *engine)
{
if (m_table)
{
// Call the gc enum callback for each nested table
size_t num_cols = m_table->numCols(), num_rows = m_table->numRows();
for(size_t col = 0; col < num_cols; col++ ) // Line 92
{
if (m_table->getColType(col) == COL_TABLE) {
for (size_t row = 0; row < num_rows; row++){ // Line 95
Table * tbl = m_table->getTable(row, col);
engine->GCEnumCallback(tbl);
}
}
}
}
}
答案 1 :(得分:6)
这是关于循环的初始化部分中的col
和row
部分。这些陈述什么都不做。只需删除它:
for( ; col < num_cols; col++)
答案 2 :(得分:5)
for( col; col < num_cols; col++ )
col;
这没有效果。你必须为它分配一些东西,或者根本不写它。由于您将其分配出循环,因此您只需在该位置留空;
或使用while循环。
答案 3 :(得分:2)
您收到这些警告是因为for
循环中的初始化语句是无效的表达式:
for(col; col < num_cols; col++) // line 92: "col" has no effect
for(row; row < num_rows; row++) // line 95: "row" has no effect
由于您已经在循环外部初始化了这些变量,因此您可能希望从for
语句中省略它们:
for(; col < num_cols; col++) // line 92
for(; row < num_rows; row++) // line 95
但是,最好的办法是在for
循环中自己初始化变量,而不是在它们之外:
// Call the gc enum callback for each nested table
size_t num_cols = m_table->numCols(), num_rows = m_table->numRows();
for(size_t col = 0; col < num_cols; col++ ) // Line 92
{
if (m_table->getColType(col) == COL_TABLE) {
for (size_t row = 0; row < num_rows; row++){ // Line 95
Table * tbl = m_table->getTable(row, col);
engine->GCEnumCallback(tbl);
}
}
}
答案 4 :(得分:0)
如果你真的想在你的for循环中键入变量名称(可能是提示?),请尝试更改:
for( col; col < num_cols; col++ )
这样的事情:
for( col = col; col < num_cols; col++ )
两条线。它应该完成这项工作。
答案 5 :(得分:0)
我的猜测是你可以简单地使用
for(; col < num_cols; col++ ) // Line 92
和
for (; row < num_rows; row++) { // Line 95