类参考(Class Reference)变量的调用问题

initora 2005-02-28 09:55:43
我用这种技术在我的TPDObject类中声明并实现了一个函数如下:
//Class reference
typedef TPDObject TPDClass;

//---------------------------------------------------------------------------
///

class TPDObject : public TObject
{
friend class TDMObject;
friend class TPDList;
private:
int FID;
bool GetIsAssigned();
protected:
TDMObject * DMObject;
TPDObject * GetObject(TPDClass * ObjectClass, TPDObject * PDObject,
int ObjectID);
。。。

然后我用这样的方式去调用:
//TClientList
__fastcall TClientList::TClientList(AnsiString Name)
**********: TPDList(TClient, new TClientDM(Name)) ********************
{
//
}
报错说不能这样使用TClient类型,怎么调用才对呢?

注:TClient是TPDObject的子类,且确认只有这个打****号的语句出错
...全文
102 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
initora 2005-03-01
  • 打赏
  • 举报
回复
那岂不是太ft啦?我就是想通过传递真实的子类类型来构造正确的子类的,大牛有什么办法不?
3996906 2005-02-28
  • 打赏
  • 举报
回复
客气了~~~~~~偶也只是猜的~~~~~~~~~~~~~
3996906 2005-02-28
  • 打赏
  • 举报
回复
是这样的,你定义是这样,c++会把它当它的父类来看,除非你有对应的虚函数才能用子类的那些函数(好象是这样说的,好久木看c++书了)
initora 2005-02-28
  • 打赏
  • 举报
回复
谢谢,我先试试看
3996906 2005-02-28
  • 打赏
  • 举报
回复
__fastcall TPDList(TPDObject * PDClass, TDMObject * DMObject);

你用的时候是
:TPDList(TClient, new TClientDM(Name))

new 的那块木错,但是前面一个呢?这个不是个类吗?这里按要求是个TPDObject * PDClass的指针

c++里有这样用的,拿子类的实例作为父类的来用,但是你的TClient不是个类吗?这个你也new一个试试
3996906 2005-02-28
  • 打赏
  • 举报
回复
__fastcall TPDList(TPDObject * PDClass, TDMObject * DMObject); 函数原型

: TPDList(TClient, new TClientDM(Name)) 你的用法

第一个参数是个类还是类的实例?我觉得这里应该放个实例
initora 2005-02-28
  • 打赏
  • 举报
回复
看看我这里对TPDList(TPDClass * PDClass, TDMObject * DMObject)构造函数的实现,TPDClass * PDClass似乎可以new一个对象出来的,莫非这里也错了(编译器没报错)?
// TPDList implementation
__fastcall TPDList::TPDList(TPDClass * PDClass, TDMObject * DMObject)
{
//inherited Create;
TPDObject * NewObject = NULL;
List = new TList();
// Navigate through the DM object, saving all objects in our list
do
{
NewObject = new TPDClass;
if (DMObject->NextObject(*NewObject))
List->Add(NewObject);
else
delete NewObject;
}
while (NewObject == NULL);
}
3996906 2005-02-28
  • 打赏
  • 举报
回复
TClient是个类吧

TPDObject * PDClass要求这里是个类的实例吧
initora 2005-02-28
  • 打赏
  • 举报
回复
是这个函数:
TPDObject * GetObject(TPDClass * ObjectClass, TPDObject * PDObject,
int ObjectID);

那个TPDList的构造函数原型如下:
__fastcall TPDList(TPDObject * PDClass, TDMObject * DMObject);
initora 2005-02-28
  • 打赏
  • 举报
回复
发现不行,我new 一个TClientList的对象后,追查代码发现
__fastcall TPDList::TPDList(TPDClass * PDClass, TDMObject * DMObject)
{
//inherited Create;
TPDObject * NewObject = NULL;
List = new TList();
// Navigate through the DM object, saving all objects in our list
do
{
***NewObject = new TPDClass;******************************************
if (DMObject->NextObject(*NewObject))
List->Add(NewObject);
else
delete NewObject;
}
while (NewObject == NULL);
}
打****号的这个NewObject对象的类型竟然是基类类型TPDObject,怎么回事呢?

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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