• 9903阅读
  • 7回复

【提问】STL链表的运用 [复制链接]

上一主题 下一主题
离线zccmin
 
只看楼主 倒序阅读 楼主  发表于: 2005-11-23
我自己实现一个类,基于QWideget,我想把它的对象放入链表,做法如下:
class Myview :public QWidget
{
  public:
  view(QWidget parent,const char* name);
  ..........................
}
void main()
{
  list <Myview> mylist;
  Myview view(this);
  mylist.push_back(view);
 
}
我觉得是真确的,可是编译时出现错误提示如下:
/usr/include/g++-3/stl_construct.h: In method `Myview::Myview
(const Myview &)':
/usr/include/g++-3/stl_construct.h:48:   instantiated from `construct (_T1 *, const _T2 &) [with _T1 = Myview, _T2 =

Myview]'
PLC_LAD_IL.cpp:293:   instantiated from here
/usr/local/qt/include/qwidget.h:685: `QWidget::QWidget (const QWidget
&)' is private
/usr/include/g++-3/stl_construct.h:48: within this context
请高手指点。
[ 此贴被XChinux在2005-11-23 16:20重新编辑 ]
离线XChinux

只看该作者 1楼 发表于: 2005-11-23
void main()
{
list <Myview> mylist;
Myview view(this);
mylist.push_back(view);

上面的this是指什么??
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线XChinux

只看该作者 2楼 发表于: 2005-11-23
而且你的构造函数要求有两个参数,你的使用方法不正确。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线zccmin
只看该作者 3楼 发表于: 2005-11-23
两个参数是没问题的,因为在构造函数时,const char*name=0
至于this,是因为:由于程序比较大,我只截了一部分,完整的用法是:
class Mywidget :public QWdiget
{
  .....
list <Myview> mylist;
pulbic slots:
void viewlist_slot();
......
};
void Mywidget ::viewlist_slot()
{
  Myview view(this);
mylist.push_back(view); //如果这行不要,程序编译是正确的

}
离线zccmin
只看该作者 4楼 发表于: 2005-11-23
高手给我看看哦
离线htyoung

只看该作者 5楼 发表于: 2005-11-23
看错误信息好像是你放入list的成员是private 或是你的list是private的,但是你在class外使用了

在qt中也许用 QValueList或Qptrlist比较简单
***
QT5
***
离线zccmin
只看该作者 6楼 发表于: 2005-11-25
同志们,问题解决了。
离线zccmin
只看该作者 7楼 发表于: 2005-11-25
为了感谢各位的留言,我把我的分析方法跟大家分享一下。
分析如下:
在方法Mywidget::viewlist_slot()方法内,push_back(view)将生成对像view的拷贝,这样类Myview的拷贝构造函数,其父类的拷贝构造函数QWidget也被调用,而QWidget类的拷贝构造函数是用private修饰,外部不能访问,所以编译时报错。
建议改正:
class Myview :public QWidget
{
  public:
  view(QWidget parent,const char* name);
  ..........................
}
class Mywidget :public QWdiget
{
.....
list <Myview*> mylist;
pulbic slots:
void viewlist_slot();
......
};
void Mywidget ::viewlist_slot()
{
Myview *view=new Myview(this);
mylist.push_back(view);

}
快速回复
限100 字节
 
上一个 下一个