我正在尝试这段代码。我想要做的是从类型结构的向量中删除一个元素
#include <iostream>
#include <vector>
#include <algorithm>
#include <boost/bind.hpp>
using namespace std;
typedef struct _detail
{
int y;
}detail;
typedef struct _list
{
int x;
detail det;
}list;
std::vector<list> v;
list li[5];
void PushElements()
{
for(int i = 0; i < 5; i++)
{
li[i].x = i+2;
li[i].det.y = i+3;
v.push_back(li[i]);
}
}
void display()
{
for(int i = 0; i < v.size(); i++)
{
cout << v[i].x << " ";
cout << v[i].det.y << " ";
}
cout << endl;
}
void DeleteElement()
{
std::vector<list>::iterator it = std::find_if(v.begin(), v.end(), boost::bind(&list::detail::y, _1) == 3);
v.erase(it);
}
int main()
{
PushElements();
display();
DeleteElement();
cout << "After Deleting...................." << endl;
display();
return 0;
}
编译时我遇到以下错误:
error C3083: 'detail': the symbol to the left of a '::' must be a type
error C2039: 'y' : is not a member of '_list'
error C2065: 'y' : undeclared identifier
我不明白这个错误是什么以及如何解决它。有人可以帮我解决这个错误吗?
答案 0 :(得分:2)
&list::detail::y
detail
是未嵌套在list
中的类型的名称。 list
的 type detail
成员名为y
。
我想你想形成一个指向会员的指针,但据我所知,这是不可能的。你最好使用lambda进行比较。类似的东西:
std::find_if(..., ..., [something](const list& l) { return l.det.y == something; } );
另外,在全局命名空间中保留以下划线开头的标识符。 <{1}}和_list
并非严格允许。