Visual Studio sizeof非法操作数

时间:2012-02-11 14:06:33

标签: c++ windows visual-studio visual-c++ sizeof

我目前正在将在Linux上开发的程序移植到Win32。在其他问题中,我有一个非常奇怪的问题。 头文件包含以下内容:

namespace Networking {
  struct  MetaStruct
  {
    int   iDataType;
    int   iDataSize;
    void* pData;
  };

  const int MetaStructSize = sizeof(MetaStruct) - sizeof(MetaStruct::pData);
};

这在Linux上编译很好,但在使用VS2010编译Win32时出现此错误: Networking.hpp(50): error C2070: '': illegal sizeof operand

我尝试在Networking::之前添加MetaStruct,但它不会改变任何内容。奇怪的是VS2010在我用鼠标悬停它时给了我sizeof的正确值,但不会编译它。为什么呢?

1 个答案:

答案 0 :(得分:9)

在C ++ 03中有两种形式的sizeof表达式(参见ISO / IEC 14882:2003 5.3.3 [expr.sizeof])。

sizeof unary-expression
sizeof ( type-id )

MetaStruct::pData既不是有效的表达式(解析为对象类型),也不是类型的名称。

你必须这样做

sizeof( void* )

sizeof MetaStruct().pData

更新:感谢@hvd指出这现在在C ++ 11中实际上是合法的。

现在,您可以使用 id-expression ,该 id-expression 在未评估它的上下文中引用类的非静态成员。显然,VS2010不支持此功能。

C ++ 11中还有一种新形式的sizeofsizeof ... ( identifier ),但这与此无关。