【发布时间】:2012-02-11 14:06:32
【问题描述】:
我目前正在将在 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
我尝试在MetaStruct 之前添加Networking::,但它并没有改变任何东西。奇怪的是,当我用鼠标悬停它时,VS2010 给了我sizeof 的正确值,但不会编译它。为什么?
【问题讨论】:
-
试试
sizeof(decltype(std::declval<MetaStruct>().pdata)),来自<type_traits>。 -
@BoPersson:我想问题的重点是如何在不重复类型的情况下表达这一点! :-)(如果您愿意,可以使用 DRY 解决方案。)
-
确实很奇怪。您能否删除其他 sizeof 以确保我们查看的是正确的?
-
@Kerrek - 这就是我有笑脸的原因。我的代码以四分之一的代码大小解决了这个问题。很明显,他想要没有指针的结构的大小。
-
您要解决什么问题?你真的在找
offsetof(MetaStruct, pData)甚至void*(MetaStruct::*p) = &MetaStruct::pData;
标签: c++ windows visual-studio visual-c++ sizeof