我目前正在将在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
的正确值,但不会编译它。为什么呢?
答案 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中还有一种新形式的sizeof
:sizeof ... ( identifier )
,但这与此无关。