先看下面的代码(来自: SO):
这段代码初看起来并无错误,编译时提示上述错误,原因在于使用std命名空间,而std命名空间中已经有了std::distance函数.
原型为:
这个函数要求两个参数至少都满足InPut Iterator约束,y而age[0]为int类型,不满足这个约束,因此导致上面的错误信息.
这段代码的错误之处,在于std命名空间中的distance屏蔽了本地的distance函数,解决方法即为,显式调用本地方法,例如使用
::distance(age[0],age[1])
或者将distance放在一个命名空间中,例如:
或者不使用命名空间std,显式声明std::vector也可以解决。