Juk*_*rpa 3 c++ windows sizeof visual-studio visual-c++
我目前正在将一个在Linux上开发的程序移植到Win32.在其他问题中,我有一个非常奇怪的问题.头文件包含以下内容:
namespace Networking {
struct MetaStruct
{
int iDataType;
int iDataSize;
void* pData;
};
const int MetaStructSize = sizeof(MetaStruct) - sizeof(MetaStruct::pData);
};
Run Code Online (Sandbox Code Playgroud)
这在Linux上编译很好,但是在使用VS2010编译Win32时遇到了这个错误:
Networking.hpp(50): error C2070: '': illegal sizeof operand
我尝试添加Networking::之前MetaStruct但它没有改变任何东西.奇怪的是VS2010给了我正确的值,sizeof当我用鼠标悬停它,但不会编译它.为什么?
在C++ 03中有两种形式的sizeof表达式(参见ISO/IEC 14882:2003 5.3.3 [expr.sizeof]).
sizeof unary-expression
sizeof ( type-id )
Run Code Online (Sandbox Code Playgroud)
MetaStruct::pData 既不是有效的表达式(解析为对象类型)也不是类型的名称.
你必须这样做
sizeof( void* )
Run Code Online (Sandbox Code Playgroud)
要么
sizeof MetaStruct().pData
Run Code Online (Sandbox Code Playgroud)
更新:感谢@hvd,他们指出这在C++ 11中实际上应该是合法的.
您现在可以使用一个id-expression,该id-expression在未评估它的上下文中引用类的非静态成员.显然,VS2010不支持此功能.
sizeof在C++ 11中还有一种新形式:sizeof ... ( identifier )但这与此无关.