关于c++中y1,y0等变量名冲突问题
关于c++中y1,y0等变量名冲突问题
前言
今天在做题时,定义了一个名为y1的全局变量,运行后出现了意想不到的报错。
error: 'int y1' redeclared as different kind of symbol
int y1;
^~
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cmath:45,
from test-y1.cpp:2:
c:\mingw\include\math.h:273:24: note: previous declaration 'double y1(double)'
_CRTIMP double __cdecl y1 (double);
分析
从描述可以看出,是出现了变量重复定义的错误,但是我仔细查看了代码并没有重复定义的变量,继续往下看报错提示发现,变量y1和“cmath”库中的y1产生了冲突,(震惊,变量还会和标准库中产生冲突。。。。。),后又去网上查了资料发现确实是存在这样的现像。打开math.h头文件在第269(可能多有不同)开始存在以下定义:
_CRTIMP double __cdecl j0 (double);
_CRTIMP double __cdecl j1 (double);
_CRTIMP double __cdecl jn (int, double);
_CRTIMP double __cdecl y0 (double);
_CRTIMP double __cdecl y1 (double);
_CRTIMP double __cdecl yn (int, double);
所以在全局作用域中以上变量名均不可使用。
具体原因可自行百度。