警告:语句无效(C ++)

时间:2011-10-31 09:12:10

标签: c++

我有以下代码:

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(在上面的代码段中指出)

我不明白他们为什么没有效果,即使我已经盯着它看了一会儿 - 可以用第二双眼睛看他们是否能发现我所缺少的东西。

6 个答案:

答案 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)

这是关于循环的初始化部分中的colrow部分。这些陈述什么都不做。只需删除它:

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