find_if()&的错误mem_fun1()

时间:2017-12-07 01:20:28

标签: visual-studio visual-c++ stdvector

我的代码在Visual C ++ 6.0中运行良好。现在我需要让它在VS 2017中运行。编译时我有一些错误消息,我真的不知道如何修复它。这是代码:

class CTagDB : public CObject
{
    ...
    bool SameTag (const CTagDB *TagDB) { return TagDB && *this == *TagDB; }
    ...
}

class CTagsDB : public CObject
{
    ...
    std::vector<CTagDB*> m_Tags;
    ...
}

bool CTagsDB::IsDup(const CTagDB *TagDB) const
{
    return std::find_if(m_Tags.begin(), m_Tags.end(),
                        std::bind2nd(std::mem_fun1(CTagDB::SameTag),
                        TagDB)) != m_Tags.end();
}

对于此代码,我收到以下错误:

  

错误C2039:&#39; mem_fun1&#39;:不是&#39; std&#39;的成员C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ VC \ Tools \ MSVC \ 14.11.25503 \ include \ map(16):

     

注意:请参阅&#39; std&#39;

的声明      

错误C3867:&#39; CTagDB :: SameTag&#39 ;:非标准语法;使用&#39;&amp;&#39;创建指向成员的指针

     

错误C3861:&#39; mem_fun1&#39;:未找到标识符

     

错误C2672:&#39; std :: find_if&#39;:找不到匹配的重载函数

     

错误C2780:&#39; _InIt std :: find_if(_InIt,_InIt,_Pr)&#39;:需要3个参数 - 提供2个

看方法begin()&amp; end(),我怀疑向量的使用方式存在问题,因为最初的代码是在没有迭代器的情况下编写的。但是这段代码非常聪明,难以破译,更不用说维护(由我)。

任何人都可以帮我弄清楚这里发生了什么,以及如何解决它?

0 个答案:

没有答案