sizeof()不能用与类的成员吗?

deskkkk 2013-10-29 12:57:30
我用VC2012编译以下代码:

class C{
int m_i;
char m_str[4];
};
void p()
{
cout<<sizeof(C::m_i)<<endl;
cout<<sizeof(C::m_str)<<endl;
}

p函数里面的调用提示编译错误: error C2070: 'unknown': illegal sizeof operand
这是为什么呢? C++标准有没有说sizeof()能用于什么场景不能用于什么场景?
...全文
190 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2013-10-29
  • 打赏
  • 举报
回复
引用 6 楼 wangdahu888 的回复:
这是成员变量,得通过实例访问呀
正解
starytx 2013-10-29
  • 打赏
  • 举报
回复
不是sizeof的问题,是C::m_i的问题,m_i是非静态,怎么可以这样引用呢
  • 打赏
  • 举报
回复
c++11是可以这样的,如果你用的不是c++11,有个暂时的解决办法: #define SIZE_OF_MEMBER(cls, member) sizeof( ((cls*)0)->member ) cout << SIZE_OF_MEMBER(C, m_i) << endl; //不过需要成员是public属性的
  • 打赏
  • 举报
回复
可以这样来计算: class C{ public: int m_i; char m_str[4]; }; int _tmain(int argc, _TCHAR* argv[]) { sizeof( ((C *) 0)->m_i); return 0; }
  • 打赏
  • 举报
回复
这是成员变量,得通过实例访问呀
max_min_ 2013-10-29
  • 打赏
  • 举报
回复
实例化对象后试试!
modyaj 2013-10-29
  • 打赏
  • 举报
回复
C::m_i m_i属于对象 不属于C
ri_aje 2013-10-29
  • 打赏
  • 举报
回复
不行。 不过新版的 c++ 好像正在考虑增加这样的功能。
boyka913 2013-10-29
  • 打赏
  • 举报
回复
改成static int m_i;就可以 了。 还要我进一步解释吗?

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧