CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  VCL组件使用和开发

这个class的析构函数该如何写?

楼主WiseNeuro(春之舞)2005-06-02 23:42:43 在 C++ Builder / VCL组件使用和开发 提问

我写了个继承于TObject的class,但编译时除了错:[C++   Error]   E2113   Virtual   function   'CAtomData::~CAtomData()'   conflicts   with   base   class   'TObject',   不知该如何解决,请大家赐教。class如下:  
   
  class   CAtomData:public   TObject{  
      public:  
          AnsiString   *Name   ;  
          AnsiString   *Type   ;  
          AnsiString   *Value   ;  
          CAtomData():TObject()  
          {  
              Name   =   new   AnsiString()   ;  
              Type   =   new   AnsiString()   ;  
              Value   =   new   AnsiString()   ;  
          }  
          CAtomData(const   AnsiString   &name,   const   AnsiString   &type,   const   AnsiString   &value)  
            :TObject()  
          {  
                Name   =   new   AnsiString(name);  
                Type   =   new   AnsiString(type)   ;  
                Value   =   new   AnsiString(value)   ;  
          }  
          virtual   ~CAtomData()  
          {  
              delete   Name   ;  
              delete   Type   ;  
              delete   Value   ;  
          }  
  }; 问题点数:20、回复次数:7Top

1 楼F117p(走两步,你走两步?)回复于 2005-06-02 23:59:57 得分 4

虚拟函数'CAtomData::~CAtomData()'   与基类发生冲突,  
  虚拟析构函数,不是很清楚  
  不过牵涉刀VCL建议前边加:__fastcall关键字Top

2 楼Microsnow(冰火)回复于 2005-06-03 08:56:14 得分 1

我记得有些书上讲过:所有的VCL控件都派生于TObject类,它是顶级类。Top

3 楼zdhsoft(冬瓜猫)回复于 2005-06-03 09:11:14 得分 2

从TObject派生下来的子类的析构函数,要有__fastcall  
  你在前面加上:  
  下例:  
  class   A  
  {  
  public:  
          virtual   __fastcall   ~A();  
  }  
  这就可以了!Top

4 楼Microsnow(冰火)回复于 2005-06-03 09:58:12 得分 9

刚才试了一下,好象virtual也不能加,不知道为什么。  
  ====  
  *.h  
   
  class   CFamily   :   public   TObject  
  {  
  private:  
          AnsiString   FatherName;  
  public:  
          CFamily(AnsiString   MyFatherName);  
          _fastcall   ~CFamily();  
          void   ShowFatherName(void);  
  };  
   
  ====  
  *.cpp  
   
  CFamily::CFamily(AnsiString   MyFatherName):   TObject()  
  {  
          FatherName   =   MyFatherName;  
  }  
   
  _fastcall   CFamily::~CFamily()  
  {  
   
  }  
   
  void   CFamily::ShowFatherName(void)  
  {  
          ShowMessage(FatherName);  
  }  
  这样看起来是可以了。Top

5 楼zdhsoft(冬瓜猫)回复于 2005-06-03 11:19:04 得分 2

其实加不加virtual结果都是一样的!  
  因为TObject的析构函数是virtual的!  
  还有,你记得要包含头文件!一般你默认包括<vcl.h>就可以了:)  
  Top

6 楼jhzhao2002(debug)回复于 2005-06-03 21:35:47 得分 2

virtual   去掉。Top

7 楼WiseNeuro(春之舞)回复于 2005-06-03 23:01:26 得分 0

谢谢!在析构函数前面加上__fastacall就好了。Top

相关问题

  • 析构函数
  • 析构函数?
  • 构造函数和析构函数
  • 构造函数与析构函数
  • 构造函数析构函数问题
  • 析构函数问题
  • 有关析构函数
  • c++关于析构函数!
  • 析构函数的问题
  • 析构函数的问题

关键词

  • 函数
  • virtual
  • catomdata
  • ansistring
  • cfamily
  • 析构函数
  • fathername
  • myfathername
  • tobject
  • fastcall

得分解答快速导航

  • 帖主:WiseNeuro
  • F117p
  • Microsnow
  • zdhsoft
  • Microsnow
  • zdhsoft
  • jhzhao2002

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo