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

下面的代码中,报错: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);
}

c++

1个回答

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

 _mybind1st<myless<int>,int>

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

u013266600
laola的故事 因为是练习的代码,要是全贴的话,不相关代码太多了,我怕看不清呀。
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问