我正在尝试使用list::insert将对象插入到列表中。这样做时我遇到了一些麻烦和编译错误。这是我的函数:
class Gui {
private:
std::vector<const Widget*> NoButtons;
std::list<const AbstractButton*> Buttons;
public:
void insert(Widget* p){
if(!p)
throw "NoInsert";
else
NoButtons.vector::push_back(p);
}
void insert(unsigned int i, PushButton& pb){
std::list<const AbstractButton*>::const_iterator cit = Buttons.begin();
for(int k=0; k < i; k++)
{
if(cit == Buttons.end())
throw "NoInsert";
else
cit++;
}
Buttons.list::insert(cit, &pb);
}
第二个insert
函数必须将一个PushButton
项(这是一个派生的 AbstractButton
类(插入到按钮列表的特定位置,由 unsigned int
参数给出。我是C++编程的新手,我真的很想了解如何以最好的方式实现这个结果。另外,我不知道我需要使用哪种范围来避免声明的insert
函数与vector
类和list
类中已有的insert
函数之间的冲突。
我收到这种错误:
[Error] no matching function for call to 'std::list<const AbstractButton*>::insert(std::list<const AbstractButton*>::const_iterator&, PushButton*)'
不需要使用 NoButtons.vector::
来访问 std::vector<const Widget*>
的成员函数。正如编译器可能会告诉您的那样,这是不正确的语法。您可以简单地使用NoButtons.
.而不是
NoButtons.vector::push_back(p);
用
NoButtons.push_back(p);
您可以使用
NoButtons.vector<const Widget*>::push_back(p);
但没有必要使用更长的句法形式。
NoButtons.vector::push_back(p);
语法不正确,因为vector
不是类型。 vector<const Widget*>
是一种类型。
同样,而不是
Buttons.list::insert(cit, &pb);
用
Buttons.insert(cit, &pb);
当删除 R Sahu 提到的不正确的范围运算符时,代码在编译时似乎是正确的。但是我也需要使用迭代器而不是const_iterator即使我没有直接使用迭代器来修改成员,这仍然会给我带来编译错误。我对此一无所知,所以我想听听你对此的评论。
void insert(unsigned int i, PushButton& pb){
std::list<const AbstractButton*>::iterator cit = Buttons.begin();
for(int k=0; k < i; k++)
{
if(cit == Buttons.end())
throw "NoInsert";
else
cit++;
}
cit++;
Buttons.insert(cit, &pb);
}
我将在运行时进行一些测试,以查看它是否正常工作。感谢您的帮助