【发布时间】:2015-04-02 15:17:33
【问题描述】:
我想根据 lambda 谓词从向量中删除一个对象:
class tmr
{
public:
tmr();
~tmr();
static void start();
bool is_time_out(double sec);
double t_elapsed();
};
struct sobj
{
int count;
bool tflag;
int ID;
tmr timer;
friend bool is_stime(timer& objtimer,double sec)
{
return objtimer.is_time_out(sec);
}
};
在主程序的某个地方,我填充了一个vector<sobj>,然后在一段时间后,我想删除指定了 ID 并且计时器已过的元素。
我这样做了,它抱怨无法将 void 转换为 bool
sobj strobj;
vector<sobj> vecobj;
vecobj.erase(std::remove_if(vecobj.begin(),vecobj.end(),[&](const sobj& mysobj){return ( mysobj.ID== THE_ID && mysobj.is_stime(mysobj.timer,5));}),vecobj.end());
【问题讨论】:
-
您能否显示您的编译器及其版本,并粘贴实际错误?
-
@Useless:无用的部分是 Sam 没有包含这部分错误:
foo.cc:11:16: error: use of undeclared identifier 'is_sobj' -
你能发布实际的错误信息,而不是你的解释吗?突出显示、复制、粘贴到文本编辑器中,在每行前面添加 4 个空格(
s/^/ /假设您的编辑器是 vi),然后将其编辑到您的帖子中。 -
首先,编译器是C++11。我做了答案中的建议,错误是:错误:将'const timer'作为'bool timer :: is_time_out(double)'的'this'参数传递会丢弃限定符[-fpermissive]返回到.obj_timer.is_time_out(sec) ;
-
好的,我会发布输出,我只需要编辑它,我无法透露一些输出信息