错误C2027:gcc vs msvc情况

时间:2014-05-01 17:04:21

标签: c++ gcc visual-studio-2010

这段简单的代码

class S;

class G
{

    void onRead(S & s)
    {
           (void)s;
    }
};

完全适用于GCC。使用(void)s是避免警告“未使用的变量”的非常有用的方法。但MSVC认为这是一个错误,停止编译。 它给出了臭名昭着的错误C2027:使用未定义类型的's'。但是这里根本就没用过。

我该如何解决这类麻烦?

我不想使用void onRead(S &)的形式,因为你在这个小片段示例中看不到它,但在我的代码中,'name'真的很有意义,对理解参数很有用

2 个答案:

答案 0 :(得分:2)

有几种方法可以避免错误。

最直接的是将变量名称转换为注释:

void onRead(S & /* s */)

另一种方法是使用宏来删除变量:

#define UNUSED(x)

void onRead(S & UNUSED(s))

我确定您已经考虑过将代码移动到S已完全定义的位置,并且有一些原因您无法做到这一点。

答案 1 :(得分:1)

您不能使用“s”,因为类“S”尚未完全定义。你可以:

1)使用#pragma warning(禁用:4100)

禁用警告

2)将onRead函数的主体移动到已完全定义“S”的位置

3)移动“S”的定义,使其在onRead

之前

4)使用空指针:(void*)&s;