转化的问题

againli 2004-04-23 12:51:27
今天看侯捷的对象模型时候,打了一段代码,有问题
struct base1{int val1;};
struct base2{int val2;};
struct derived:base1,base2{};

void test1(int derived::* bmp, derived *pd)
{
printf("%d", pd->*bmp);
}


int main()
{

float farther::* fp = & farther::_x;
printf("%d", fp);
// cout << fp ;

int base2::*bmp = & base2::val2;
derived *ligang = new derived;
ligang->val2 = 100;
test1(bmp + sizeof(base1), ligang);
//这里VC6总是提时说操作符类型不匹配
delete ligang;



return 0;
}

我只是想在类成员的偏移位置上加上一个积累的距离,正常的指针不能直接加整数?!
我尝试乐静态和重解释转换,不可以阿,高手帮忙
...全文
19 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
againli 2004-04-26
  • 打赏
  • 举报
回复
哦,是的cfront,想起来了
但是如果要像正常指针那样进行运算,如何做到呢?
指教,谢谢
angelo23 2004-04-25
  • 打赏
  • 举报
回复
书上的应该是cfront转换成C代码之后的结果,对于C++来说相当于伪代码
againli 2004-04-25
  • 打赏
  • 举报
回复
weixiaohua(我爱Delphi)
呵呵,你还是没理解我的意思....
angelo23(angelo)
确实是个疑问..难道是书上的部分代码有问题..?还是编译器的问题...哎..郁闷
againli 2004-04-23
  • 打赏
  • 举报
回复
楼上的是求值之后,加上基类大小,误会我的意思了,我是想在指针上直接加便宜量
weixiaohua 2004-04-23
  • 打赏
  • 举报
回复
bmp是一个指向类对象成员变量的指针,所以你不能像一般的指针或者引用那样使用它!

//这样才行的!
cout << (der->*bmp) + sizeof(base1);
angelo23 2004-04-23
  • 打赏
  • 举报
回复
因为这不是一个你所期望的“正常的指针”:-)
指向类成员的指针不可以像一般的指针那样进行算术运算,甚至两个指向类成员的指针也不可以相减。我试了一下(int test::*)4 强制转换,甚至这样都是不可以的
weixiaohua 2004-04-23
  • 打赏
  • 举报
回复
void test1(derived *der, int derived::* bmp, derived *pd)
{
//printf("%d", pd->*bmp);
cout << (der->*bmp) + sizeof(base1);
}

这样还差不多!

64,642

社区成员

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

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