有人可以告诉我为什么我无法编译以下程序
#include<iostream>
#include<string>
#include<cmath>
#include<iostream>
#include<cfloat>
#define MOD 10000009
using namespace std;
double distance(pair<int,int> p1,pair<int,int> p2)
{
double dist;
dist = sqrt( (p1.first-p2.first)*(p1.first-p2.first) + (p1.second-p2.second)*(p1.second-p2.second) );
return(dist);
}
int main()
{
int N,i,j;
cin >> N;
pair<int,int> pi[N];
for(i=0;i<N;i++)
{
cin >> pi[i].first >> pi[i].second;
}
for(i=0;i<N;i++)
{
cout << pi[i].first << " "<< pi[i].second << endl;
}
distance(pi[0],pi[1]); // This line is giving error
return 0;
}
Run Code Online (Sandbox Code Playgroud)

distance由标准库定义,你已经using进入了全局命名空间,所以它试图使用那个而不是你编写的那个(和期望的).
调用您的函数以避免名称冲突.
也像样式注释一样,在C++代码#define中通常可以用const或内联函数替换以提供更大的类型安全性,我喜欢为using std::cout我需要的每个项目编写等,而不是using namespace std.
您的代码至少有3个问题,使其不合法C++.有问题的是:
distance(pi[0],pi[1]); // This line is giving error
Run Code Online (Sandbox Code Playgroud)
distance标准库中有一个,编译器正在解析调用此文件.这是因为你这样做using namespace std.最好不要这样做using namespace std,特别是在标题中,但你可以看到它在这里引起了一个问题.
有一些潜在的解决方案.
using namespace std并限定标准库对象的所有使用(如std::cin)using namespace std使用特定的using声明替换,仅引入您实际使用的StdLib中的那些片段(如using std::cin)::distance(...);编辑另外,这不是合法的C++:
int N,i,j;
cin >> N;
pair<int,int> pi[N];
Run Code Online (Sandbox Code Playgroud)
标准C++只允许在编译时知道大小时声明C样式数组.您可能正在使用gcc工具来构建它,这就是它不会导致错误的原因.但是,您使用的是特定于GCC的语言扩展,动态大小的数组,并且您编写的代码不是C++语言本身的一部分.
| 归档时间: |
|
| 查看次数: |
22515 次 |
| 最近记录: |