我的代码在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(),我怀疑向量的使用方式存在问题,因为最初的代码是在没有迭代器的情况下编写的。但是这段代码非常聪明,难以破译,更不用说维护(由我)。
任何人都可以帮我弄清楚这里发生了什么,以及如何解决它?