函数在向vector传递指针时是二义性的

c++: Function is ambiguous when passing pointers to vectors

本文关键字:二义性 指针 vector 函数      更新时间:2023-10-16

在我的程序中,我有一个与两个向量一起工作的函数(实际上,程序必须求和两个数字,这些数字有大量的数字,但我认为这与此无关)。下面是代码

#include <iostream>
#include <vector>
using namespace std;
void plus (vector <int> *n1, vector <int> *n2)
{
    // my code here
}

int main()
{
    unsigned int i;
    vector <int> n1, n2;
    for (i = 1; i < 5; ++i)
    {
        n1.push_back (i);
    }
    for (i = 9; i > 5; --i)
    {
        n2.push_back (i);
    }
    plus (&n1, &n2);
    return 0;
}

当我试图编译它时,它说"对'plus'的引用是模糊的"。有什么问题吗?

虽然这里给出的所有答案在技术上都是正确的,但我认为只有一个可持续的解决方案:

移除using namespace std;。不幸的是,许多教程和书籍都在教授如何使用这种方法,但它带来了许多问题,您刚刚看到的就是其中之一。要更好地了解using和名称空间,请阅读Herb Sutter关于这个问题的文章:http://www.gotw.ca/publications/migrating_to_namespaces.htm

有一个函数std::plus是混淆编译器。

重命名您的函数或说::plus调用它。

http://www.cplusplus.com/reference/functional/plus/

plus是标准c++库中的一个函数。

避免使用::plus

当一个函数是"二义性的"时,这意味着已经存在一个具有相同名称和结构的函数。因此,正如其他人提到的,std::plus与您的定义相冲突,并且编译器不知道使用哪个。

重命名方法,或者调用::plus