这段简单的代码
class S;
class G
{
void onRead(S & s)
{
(void)s;
}
};
完全适用于GCC。使用(void)s
是避免警告“未使用的变量”的非常有用的方法。但MSVC认为这是一个错误,停止编译。
它给出了臭名昭着的错误C2027:使用未定义类型的's'。但是这里根本就没用过。
我该如何解决这类麻烦?
我不想使用void onRead(S &)
的形式,因为你在这个小片段示例中看不到它,但在我的代码中,'name'真的很有意义,对理解参数很有用
答案 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;