C++列表::插入编译错误



我正在尝试使用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);
    }

我将在运行时进行一些测试,以查看它是否正常工作。感谢您的帮助

相关内容

最新更新