我正在尝试将以下代码用于我的节点编辑器,我正在使用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<_Ty, _Alloc>::insert
[with _Ty=Node *, _Alloc=std::allocator<Node *>]" matches the argument list
答案 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()