说明:
本文是帮助和我一样的蒟蒻们的,难免有不足之处,请多多指教。
今天鄙人正快乐的在某谷上刷题,在刷到P2689 东南西北这道题时出现了错误,相信这个错误大家都出现过,那么我就来告诉大家如何避免这个坑。
下面是代码:
#include<bits/stdc++.h>
using namespace std;
int t,x1,y1,x2,y2;
int cnt[6];
char cur;
int main(){
cin>>x1>>y1>>x2>>y2;
cin>>t;
for(int i = 1 ; i<=t ; i++){
cin>>cur;
if(cur == 'N') cnt[1]++;
else if(cur == 'S') cnt[2]++;
else if(cur == 'W') cnt[3]++;
else cnt[4]++;
}
if(x2-x1>cnt[4]||x1-x2>cnt[3]||y2-y1>cnt[1]||y1-y2>cnt[2]){
cout<<-1;
return 0;
}
cout<<abs(x1-x2)+abs(y1-y2);
return 0;
}
报错信息如下:
解释:“int y1”被重新声明为不同类型的符号。
这里有两种原因:
1.y1这个名字被定义过。
很显然,在这段代码里并没有被定义过。
2.y1与头文件包含的函数名重复。
经过询问那些DALAO们之后,我发现了问题所在:
在头文件“cmath”下的“math.h”文件的第266行有这样一段代码
_CRTIMP double __cdecl y1 (double) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
并且在262行至270行都定义了几个函数:
_CRTIMP double __cdecl j0 (double) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
_CRTIMP double __cdecl j1 (double) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
_CRTIMP double __cdecl jn (int, double) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
_CRTIMP double __cdecl y0 (double) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
_CRTIMP double __cdecl y1 (double) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
_CRTIMP double __cdecl yn (int, double) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
_CRTIMP double __cdecl chgsign (double);
大家在取变量名的时候一定不能取和函数名或关键字相同的名字。
改正方法:
将变量“y1”改为y3或y即可。