编辑:谢谢你的回答!就像我说的,这是为类提供的代码,因此包含了函数的名称空间和名称。我很高兴能够理解命名空间std究竟是什么,并且我已将我的输入作为评论包含在我的答案中(尽管我的答案保持不变)。
以下代码包含我创建的作品。这是一个类,所以这是我需要判断的唯一部分。我的编译器没有运行(对重载函数的模糊调用),但我觉得这是正确的。
template <class data_type>
void swap(data_type &a, data_type &b) //swaps 2 variables
{
data_type c; //temp variable
c = a;
a = b;
b = c;
}
以下是完整代码:
#include <iostream>
#include <string>
using namespace std;
template <class data_type>
void swap(data_type &a, data_type &b) //swaps variables
{
data_type c;
c = a;
a = b;
b = c;
}
int main( )
{
string x = "first", y = "second";
int m = 10, n = 20;
char q = 'Q', r = 'R';
cout<<"x before swap called = "<<x<<" and y before swap called = "
<<y<<endl;
swap(x,y);
cout<<"x after swap called = "<<x<<" and y after swap called = "
<<y<<endl<<endl;
cout<<"m before swap called = "<<m<<" and n before swap called = "
<<n<<endl;
swap(m,n);
cout<<"m after swap called = "<<m<<" and n after swap called = "
<<n<<endl<<endl;
cout<<"q before swap called = "<<q<<" and r before swap called = "
<<r<<endl;
swap(q,r);
cout<<"q after swap called = "<<q<<" and r after swap called = "
<<r<<endl<<endl;
return 0;
}
答案 0 :(得分:6)
标准库附带了一个模板std::swap
(请参阅cpp reference),您正在定义自己的swap
- 模板功能。到目前为止没问题,但是一旦你声明using namespace std
,swap
的任何使用都是不明确的,因为编译器无法决定是采用std::swap
还是你自己swap
。
因此,正如其他人已经提到的那样,请避免使用using namespace std
声明。
此外,您可以考虑宣布&#34;您的&#34; swap
在自己的命名空间中,例如:
namespace class1_exercise {
template <class data_type>
void swap(data_type &a, data_type &b) //swaps variables
{
data_type c;
c = a;
a = b;
b = c;
}
}
因此,您可以区分&#34;您的&#34; swap和std :: swap更加明确:
std::swap(x,y);
// versus:
class1_exercise::swap(x,y);
答案 1 :(得分:4)
是你。
//using namespace std;
using std::string;
using std::cout;
using std::endl;
答案 2 :(得分:2)
这是错误的原因
using namespace std;
使用命名空间std&#34; 声明&#34;真的非常糟糕的做法 使用命名空间会引入您不想要的内容
有两种替代解决方案
ONE
using std::cout;
cout << "Values:";
两个(我建议这个)
std::cout << "Values:";
注意:您可以更改交换功能的名称,但最好更好地适应更好的方式,以便将来遇到更少的问题