VC++ 11 map和multimap迭代器(重载)C2535

Lip*_*z3k 4 c++ stl map multimap visual-c++-2012

我正在玩新的VS 2012,我可能会遇到新的C++ 11问题.当我在项目设置中将平台工具集设置为VS2010(v100)时,这种代码很有效.

.H:

typedef std::multimap<unsigned, unsigned>   SizeMap;
typedef std::map<unsigned, unsigned>        OffsetMap;

private:
    inline void _RemoveBlockL(SizeMap::iterator sizeI);
    inline void _RemoveBlockL(OffsetMap::iterator offsetI);
Run Code Online (Sandbox Code Playgroud)

的.cpp:

inline void Foo::_RemoveBlockL(SizeMap::iterator sizeI)
{
// impementation
}

inline void Foo::_RemoveBlockL(OffsetMap::iterator offsetI)
{
// impementation
}
Run Code Online (Sandbox Code Playgroud)

但是当我为VS2012(v110)更改它时,我会收到以下错误:

Error   61  error C2535: 'void
Boo::system::Foo::_RemoveBlockL(std::_Tree_iterator<_Mytree>)' : member function already
defined or declared D:\_work\wp-test\boo\system\foo.h
Run Code Online (Sandbox Code Playgroud)

为什么重载不能在VC++ 11中运行?

jco*_*der 5

这只是一种可能性,我现在无法检查,但它们改变了在vc ++ 11中实现迭代器的方式,因此它们可能是相同的底层类型,因此无法对其进行重载.

是否要求不同容器类型的迭代器本身具有不同的类型?

请参阅http://blogs.msdn.com/b/vcblog/archive/2012/04/06/10291485.aspx