gpt4 book ai didi

c++ - Visual Studio sizeof 非法操作数

转载 作者:可可西里 更新时间:2023-11-01 14:42:06 25 4
gpt4 key购买 nike

我目前正在将一个在 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):错误 C2070:“”:操作数的大小非法

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

最佳答案

在 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 来引用类中未计算的上下文中的非静态成员。显然 VS2010 不支持这一点。

在 C++11 中还有一种新形式的 sizeof:sizeof ... ( identifier ) 但这里不相关。

关于c++ - Visual Studio sizeof 非法操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9240820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com