std :: vector没有重载函数的实例与参数列表匹配

时间:2020-07-02 19:49:44

标签: c++ vector visual-c++ compiler-errors

我正在尝试将以下代码用于我的节点编辑器,我正在使用Visual Studio 2019,每当我尝试插入节点对象时都会出错

编辑:忘记了push_back是正确的功能,我很糟糕

std::vector<Node*> nodes;

void Example(){
    Node* s = new Node();
    nodes.insert(s);
}

完整错误:

no instance of overloaded function "std::vector&lt;_Ty, _Alloc>::insert 
[with _Ty=Node *, _Alloc=std::allocator&lt;Node *>]" matches the argument list

2 个答案:

答案 0 :(得分:3)

insert需要一个iterator自变量作为您要插入项目的位置。例如:

nodes.insert(nodes.begin(), s);

如果您不想指定位置,而只想向向量添加元素,则可以使用push_back

nodes.push_back(s);

答案 1 :(得分:2)

std::vector<T,Allocator>::insert在指定位置插入元素 容器中的位置-

#include<iostream>
#include<string>

using namespace std;

class numb
{
public:
    int* ptr;
    numb(int = 3);
    numb(const numb&);
    virtual ~numb();
};

numb::numb(int x)
{
    this->ptr = new int(x);
}

numb::numb(const numb& l1)
{
    this->ptr = new int(*(l1.ptr));

}

numb::~numb()
{    
}

int main()
{
    numb l1(5), l2;
    l1 = l2;
    cout << l1.ptr << endl;
    cout << l2.ptr << endl;
    system("Pause");
    return 0;
}

您没有将迭代器传递到要插入元素的位置,因此不会出现错误。如果要在vector的末尾插入新元素,则可以传递迭代器或使用iterator insert( iterator pos, const T& value );

因此以下方法将起作用-

push_back()

OR

nodes.insert(nodes.begin(), s);

或者您可以完全使用nodes.insert(nodes.end(),s); -

push_back()