我是使用STL算法的新手,目前我停留在语法错误上。我的总体目标是像在c#中使用Linq一样过滤源列表。在C++中可能有其他方法来做到这一点,但我需要了解如何使用算法。std :: binary_function使用的语法
我的函数适配器使用我的用户自定义函数对象是
struct is_Selected_Source : public std::binary_function<SOURCE_DATA *, SOURCE_TYPE, bool>
{
bool operator()(SOURCE_DATA * test, SOURCE_TYPE ref)const
{
if (ref == SOURCE_All)
return true;
return test->Value == ref;
}
};
而在我的主程序,我使用如下 -
typedef std::list<SOURCE_DATA *> LIST;
LIST; *localList = new LIST;;
LIST* msg = GLOBAL_DATA->MessageList;
SOURCE_TYPE _filter_Msgs_Source = SOURCE_TYPE::SOURCE_All;
std::remove_copy(msg->begin(), msg->end(), localList->begin(),
std::bind1st(is_Selected_Source<SOURCE_DATA*, SOURCE_TYPE>(), _filter_Msgs_Source));
什么,我发现了在Rad Studio 2010中出现以下错误。此错误表示“您的源文件使用了typedef符号,其中变量应出现在表达式中”。
“的typedef E2108使用不当‘is_Selected_Source’”
编辑 - 做VS2010中,它具有更好的编译器诊断的详细的实验后,我发现这个问题是remove_copy的定义只允许uniary功能。我将这个功能改为非法行为并让它起作用。
您的第一个答案解决了我的大部分问题,但是现在当我编译时,我得到了 - E2034无法将'const SOURCE_TYPE'转换为'SOURCE_DATA *' – 2010-06-29 20:01:37
使用修改后的代码和错误消息可能会更简单。当使用单个线程解决一段时间内的几个问题时,它可能会有点混乱:) – Cogwheel 2010-06-29 20:08:06
乍一看,听起来好像你正在用错误的参数实例化binary_function。也许你正在传递指针类型作为参数,当你只是传递基类型? (is_Selected_Source模板处理将其转换为指针) – Cogwheel 2010-06-29 20:09:36