导语: 在代码书写过程中,能起出浅显易懂的变量名,也是一门劲道的功夫。
当时正在设计用户信息的存储表结构,对于“专业”最先想到的英文单词就是“major”,但是遇到一些问题,记录并解决如下。
一。问题描述:
1.使用major做变量名的测试代码如下:
#include <fstream>
struct Header {
int major;
Header(int mj)
: major(mj) { }
};
int main(){}
2.编译时,产生如下错误:
/data # g++ test.cpp
test.cpp: In constructor ‘Header::Header(int)’:
test.cpp:8: error: class ‘Header’ does not have any field named ‘gnu_dev_major’
二。原因分析
查阅资料发现:当在结构体内定义一个变量major,并使用参数列表major()进行初始化的时候,会和C++标准文件中定义的宏冲突,编译产生错误。具体参考 GCC Bugzilla – Bug 17130
三。解决办法:
通过增加"#undef major",取消前置定义即可:
#include <fstream>
#undef major
struct Header {
int major;
Header(int mj)
: major(mj) { }
};
int main(){}
四。总结:
当然最好自己重新起一个名字,比如说可以用profession,哈哈!