Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ &引用;plus()的用法不明确;错误_C++_Function_Add - Fatal编程技术网

C++ &引用;plus()的用法不明确;错误

C++ &引用;plus()的用法不明确;错误,c++,function,add,C++,Function,Add,我正试图写一个函数,它取两个数字并输出它们的和 #include <iostream> using namespace std; int plus(int, int); int main () { int a, b, result; cout << "2 numbrs"; cin>>a>>b; result = plus(a,b); cout << result; return 0; } int plus(int a

我正试图写一个函数,它取两个数字并输出它们的和

#include <iostream>

using namespace std;

int plus(int, int);

int main () {
 int a, b, result;
 cout << "2 numbrs";
 cin>>a>>b;
 result = plus(a,b);
 cout << result;
 return 0;
}

int plus(int a,int b) {
 int sum;
 sum = a+b;
 return sum;
}

这是我的第一个C++程序,实际上我发现一个错误是盲目的。

< P>要么做< /P>
result = ::plus(a,b);

或者重命名该函数。这是一个很好的教训,说明了为什么
使用命名空间std
不被视为良好做法。

调用的
std
中已经有一个函数对象。因为
使用名称空间std
这个
std::plus
放在全局名称空间中,这也是您的
plus()
的名称所在。当您试图调用
plus()
时,编译器无法判断您是指
std::plus
还是指
plus()
,因为它们都在全局命名空间中

您有以下选项:

  • 使用名称空间std删除
    (然后需要限定
    std
    命名空间中的其他函数——例如
    std::cout
  • 将您的
    plus()
    放在它自己的命名空间中(比如,
    mine
    ),并使用
    mine::plus(a,b)
    调用它
  • (假设您没有将其放在自己的命名空间中)
  • 重命名该函数,以避免名称冲突

  • 我们需要对
    使用名称空间std宣战
    @FredLarson很好奇,几乎所有的入门编程书籍/教程都使用名称空间std;没有正确解释这意味着什么,以及你应该何时实际使用它。(大多数时候你不应该)事实上,我读了很好的解释,当使用名称空间std时发生了什么,但我没有意识到这会导致这个问题。@Jac08H这是我的观点。。。如果你读了一个“解释”,但它没有解释为什么它是一个问题,那么它真的不是一个“好的解释”。@Jac08H read@Jac08H没有必要将你的问题标记为已修复。您可以接受适当的答案。
    使用名称空间std
    只在头文件中被认为是不好的做法,在实现文件中也可以。(因为它不会渗透到其他模块中)
    在这里使用namespace std
    是可以的。这里真正的问题是,
    plus
    函数正在无用地重新设计功能,并使用一个常用词来实现,而这个词恰好已经被标准库加载了语义。我主张直接使用操作符
    +
    而不是定义函数,或者在项目名称空间中定义函数。
    std::plus
    不是函数,而是函数对象。如果您想调用它,您需要执行
    std::plus()(a,b)
    std::plus{}(a,b)
    @LaurentLARIZZA修复。谢谢
    result = ::plus(a,b);