我自己的copy()函数与std::copy()发生冲突

My own copy() function collides with std::copy()

本文关键字:copy 冲突 函数 自己的 我自己 std      更新时间:2023-10-16

我有一个头文件。在这个标题中,我想使用一个类的映射。但在我包含之后,我得到了一个no matching function error,因为我在项目中有一个copy()函数(真的是一个大项目)。我在这个网站上看到http://www.sgi.com/tech/stl/download.html该地图包含一个使用std::副本,所以我想它与之冲突了。

我无法对复制功能进行任何更改,所以有没有办法在这个头文件中使用映射?(没有其他地方)。有没有办法让我的复制函数不冲突?

我在Windows7上使用Visual Studio 2008。

错误消息表明您的函数对翻译单元不可见,因此请确保包含标头。

此外,我怀疑<map>是否与using std::copy类似。你确定这个吗?

algobase.h(不是标准C++)中,只有定义了__STL_USE_NAMESPACES,才会解析using指令。你应该在包括标题之前取消定义:

#undef __STL_USE_NAMESPACES
#include "algobase.h"
#endif

您应该能够将映射封装在命名空间中,即


    namespace StopCollision
    { #include <map> }

然后,地图复制功能将通过StopCollision::std::copy可用。这很粗糙,但可以解决你的问题。

据我所知,map stl类没有复制函数。这可能是一个include问题,您可以尝试使用对包含map和copy函数的类的正向引用。