我在C ++中有一个源代码文件。这是:
#include <iostream>
using namespace std;
class myPoint
{
public:
double x;
double y;
myPoint() {x=y=0;}
};
double distance(myPoint A, myPoint B)
{
return (A.x - B.x);
}
int main()
{
myPoint A, B;
A.x=5; A.y=5;
B.x=3; B.y=2;
cout << distance(A, B) << endl;
return 0;
}
我的编译器(Microsoft Visual Studio C ++ 2012)给出了以下错误:
...
1&gt; c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ xutility(364):错误C2039:&#39; iterator_category&#39; :不是myPoint&#39;的成员。
1 GT; d:... \ source.cpp(5):见“myPoint&#39;
...
当我删除using namespace std;
时
并将cout << distance(A, B) << endl;
更改为
std::cout << distance(A, B) << std::endl;
我的计划有效。
为什么第一个版本会给我一个错误?这是什么错误?
答案 0 :(得分:3)
为什么我不能使用第一版的源代码?其中
因为您无意中从std
命名空间(std::distance
)中提取了与您定义的其他名称(distance
)相同的名称。这会给你一个冲突。
错误在哪里?
根本的错误是说using namespace std;
,特别是如果您不了解标准库中的每个名称,过去和将来。
在您自己的命名空间中定义自己的名称也是有意义的。
namespace mystuff {
class Point { ... };
double distance(const Point& A, const Point& B);
}
答案 1 :(得分:2)
您与std::distance
答案 2 :(得分:2)
标准库中有一个std::distance
因为using namespace std;
而变得可见,似乎由于某种原因它被选中而不是你的版本。
请勿使用using namespace std;
。如果你坚持,不要使用听起来像普通英语单词的名字,因为它们可能会与图书馆名称冲突。