laola的故事 2017-12-20 02:34 采纳率: 25%
浏览 1458
已结题

C++ 中函数对象的应用----取反器

下面的代码中,报错:error C2512: “_mybind1st,int>”: 没有合适的默认构造函数可用,不知道这样定义_mynot1正确不?

vector::Iterator it1 = myfind_if(vec1.begin(),
vec1.end(), mybind1st(mygreater(), 50)); //意思是50>(容器中的某一个值)
vector::Iterator it2 = myfind_if(vec1.begin(),
vec1.end(), mynot1(mybind1st(myless(), 50))); //意思是(50<(容器中的某一个值))取反即可得到

template
Iterator myfind_if(Iterator first, Iterator last, Compare &comp)
{
for (; first != last; ++first)
{
if (comp(*first)) // comp.operator()(*first) 一元函数对象 val隐藏,然后再和其中的每一个元素进行比较
return first;
}
return last;
}

//类模板
template
class _mybind1st
{
public:
typedef T vaule_type;
_mybind1st(Compare &comp, const T &val)
{
m_comp = comp;
m_val = val;
}
bool operator()(const T &val)
{
return m_comp( m_val, val);
}
private:
Compare m_comp;
T m_val;
};
//函数模板
template
_mybind1st mybind1st(Compare &comp, const T &val)
{
return _mybind1st(comp, val);
}

//类模板
template
class _mynot1
{
public:
//typedef typename Compare::value_type T
_mynot1(Compare &comp)
{
m_comp = comp;
}

template<typename T>
bool operator()(const T &val)
{
    return !m_comp(val);
}

private:
Compare &m_comp;
};

template
_mynot1 mynot1(Compare &comp)
{
return _mynot1(comp);
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2017-12-20 02:36
    关注

    把完整的代码贴出来,同时把报错行标出来。

     _mybind1st<myless<int>,int>
    

    这里说你需要一个这样参数的构造函数,但是你程序里的确没看到有定义。你定义了没有?或者构造函数的参数传错了。

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!