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::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);