明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1205|回复: 1

多谢各位版主和大侠的厚爱,小弟不胜感激,AcDbmyEntity::cast(pEntity)调用出错

[复制链接]
发表于 2003-6-3 16:34 | 显示全部楼层 |阅读模式
AcDbEntity *pEntity;
AcDbmyEntity::cast(pEntity)->getRLpoints(towPts);//
当我编译运行时报错误,请问cast()是否要在AcDbmyEntity中重载?
需重载的话该如何重载?
如果不需重载,那是否我调用形式不对?
如果不对,正确调用形式该怎样?
发表于 2003-6-4 10:49 | 显示全部楼层

没有看到你的派生类定义,你看看是不是这样

本帖最后由 leeyeafu 于 2003-6-4 10:49:47 编辑

首先,你的类AcDbmyEntity应该派生自AcDbEntity类。派生类的cast(),desc()等公共函数的声明可以用宏ACRX_DECLARE_MEMBERS()实现。因此,你的派生类定义应该包括这样的代码:
class AcDbmyEntity:public AcDbEntity
{
  public:
  ACRX_DECLARE_MEMBERS(AcDbmyEntity);
  ...
}
通常,定义了ACRX_DECLARE_MEMBERS()宏后,不需要重载cast()等函数。
另外,在调用AcDbmyEntity::cast(pEntity)之前,最好先检查指针pEntity是否为AcDbmyEntity类型,否则,即使编译时不出错误,也会出现运行时错误。
ACRX_DECLARE_MEMEBERS()宏声明的cast()函数是这样子的:
static AcDbmyEntity* cast(AcRxObject * inPtr)
{
  return ((inPtr==0)||!inPtr->isKindOf(AcDbmyEntity::desc()))
          ?0AcDbmyEntity*) inPtr;
}
从以上代码看到,若pEntity不是AcDbmyEntity类型,cast()函数返回空指针(或者说0指针),而0->getRLpoints(towPts);必然出错。
类型检查代码我相信你会写,不过其他人可能不熟悉。
AcDbEntity *pEntity;
if(pEntity->isKindOf(AcDbmyEntity::desc())
  AcDbmyEntity::cast(pEntity)->getRLpoints(towPts);//
这样,可能不会出错了。你试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-17 17:26 , Processed in 0.358124 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表