这个class的析构函数该如何写?
我写了个继承于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




