buanhui 发表于 2003-7-11 09:44:00

判别类型和得到类型指针的方法报错,求救!

请大家提供另外一种判别类型和得到类型指针的方法,下面我三次用到pEntity->isKindOf(AcDbQiang::desc())和
AcDbQiang::cast(pEntity)判别类型和得到类型指针CAD报错,不知道为什么?
for (; !pBlockIterator->done();pBlockIterator->step())
    {
      pBlockIterator->getEntity(pEntity, AcDb::kForWrite);
       if(pEntity->isKindOf(AcDbQiang::desc()))
      {
          AcDbQiang::cast(pEntity)->getlouHao(louHao);
         if(louHao!=layerhao)
          {
        AcDbQiang::cast(pEntity)->setVisibility(AcDb::kInvisible);
        pEntity->close();                       
         }
      else if(louHao==layerhao)
         {
               AcDbQiang::cast(pEntity)->setVisibility(AcDb::kVisible);
        pEntity->close();               
      }
   }
    else if(pEntity->isKindOf(AcDbliang::desc()))
    {
       AcDbliang::cast(pEntity)->getlouHao(louHao);
       if(louHao!=layerhao)
       {
            AcDbliang::cast(pEntity)->setVisibility(AcDb::kInvisible);
         pEntity->close();       
                               
       }
       else if(louHao==layerhao)
      {
         AcDbliang::cast(pEntity)->setVisibility(AcDb::kVisible);
         pEntity->close();
                               
      }
    }
   else if(pEntity->isKindOf(AcDbZhu::desc()))
{
      AcDbZhu::cast(pEntity)->getlouHao(louHao);
   if(louHao!=layerhao)
    {
      AcDbZhu::cast(pEntity)->setVisibility(AcDb::kInvisible);
      pEntity->close();
                                       
      }
   else if(louHao==layerhao)
   {
          AcDbZhu::cast(pEntity)->setVisibility(AcDb::kVisible);
          pEntity->close();                       
      }
}
pEntity->close();
}

funlxming 发表于 2003-7-11 14:00:00

if(pEntity->isKindOf(AcDbQiang::desc()))不能完全說明pEntity是指向AcDbQiang類實例.還有可能是其派生類.但AcDbQiang::cast(pEntity)就不同了.只要前後都用AcDbQiang::cast(pEntity)就行了吧.
而且你的這種寫法我覺得是不太好的.當然只是個人風格.

buanhui 发表于 2003-7-12 19:41:00

谢谢funlxming,但我相应改过来以后,还是报错,我发现我的AcDbZhu,AcDbQiang,AcDbliang都派生于AcDbEntity,可是当我用if(pEntity->isKindOf(AcDbQiang::desc()))进行第一次遍历率选时只会得到AcDbQiang,而当我把AcDbZhu和AcDbliang加入以后,再次用if(pEntity->isKindOf(AcDbQiang::desc()))遍历率选却得到AcDbZhu、AcDbQiang和AcDbliang,把条件换成if(AcDbQiang::cast(pEntity))结果相同,如果谁有过相似的问题或知道怎么解决,就帮帮我
页: [1]
查看完整版本: 判别类型和得到类型指针的方法报错,求救!