关于继承控件的问题

hsn1982 2006-04-03 05:32:27
现定义TSuperListItem类,然后在窗体中使用,会出现内存存储错误。小的底子薄想不明白是什么原因,希望各位帮忙指出原因。

class TSuperListItem : public TListItem
{
private:
bool FParent;
public:
__fastcall TSuperListItem(TListItems *AOwner);
__fastcall ~TSuperListItem();
__property bool Parent = {read= FParent,write=FParent};

};(cpp文件无代码)
窗体使用其代码:
TSuperListItem *pItem=(TSuperListItem *)ListView1->Items->Add();
pItem->Parent =true;
pItem->Caption="这是一个父节点!这是一个父节点!这是一个父节点!";
pItem->SubItems->Add("SubItems1"+IntToStr(i) );
会在最后一句出错。
...全文
162 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
勉励前行 2006-04-04
  • 打赏
  • 举报
回复
TSuperListItem *pItem=(TSuperListItem *)ListView1->Items->Add();
pItem->Parent =true; //這裡越界使用內存, 後果未定義

不能這樣子加一個Parent屬性,你可以利用 TListItem::Data屬性,這是一個void * ,得用它實現連接自己的數據。

或者加一個方法:
inline bool GetParent(TListItem *Item)
{return Item->Data == NULL ; }
inline void SetParent(TListItem *Item,bool IsParent)
{return Item->Data = IsParent ? (void *)0xff : NULL ; }

實現的方法很多種,你那種是不行的。
hsn1982 2006-04-04
  • 打赏
  • 举报
回复
多谢楼上这么多位。

定义TSuperListItem类的目的是为TListItem增加个新的属性(Parent),我这样的写法会出现访问非法内存的错误提示。
请问各位应该如何调用TSuperListItem?是否需要重写自己的listview及listitems类吗?
alloutoflove 2006-04-04
  • 打赏
  • 举报
回复
事实上楼主的几行代码中就这一句访问到非法内存了..因为Parent不是TListItem的成员.
pItem->Parent =true;
alloutoflove 2006-04-04
  • 打赏
  • 举报
回复
我用楼主的代码的最后一行只会提示i是未定义的,把i改成1就OK了, 事实上如果子类指针调用的是父类的成员的话,应该不会有非法访问的吧??? 而且我把i改成1竟然运行OK, 实现的Item也添加到ListView1中去了, 只是在关闭程序析构时提示非法指针了...
hsn1982 2006-04-04
  • 打赏
  • 举报
回复
谢谢PPower了,我明白为什么会出错了。呵呵
现在用listitem的Data属性了。
pp616 2006-04-03
  • 打赏
  • 举报
回复
风焱 说的是。
ListView1->Items->Add();返回的就不是TSuperListItem *
强制转换也没用。
stevenjscn 2006-04-03
  • 打赏
  • 举报
回复
ListView1必须先给定SUBITEMS的数目,先给LISTVIEW1指定几个SUTITEM
firetoucher 2006-04-03
  • 打赏
  • 举报
回复
TSuperListItem *pItem=(TSuperListItem *)ListView1->Items->Add();
--
这句话的意思是返回了一个TListItem,但被你强行转化为TSuperListItem。实际上这是错误的,因为返回的不是子类TSuperListItem。
居然在最后一句才报错?
不知道你要干什么,所以不知道怎么改你的。

FT
--
Anything one man can imagine, other men can make real.

13,825

社区成员

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

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