C++使用major做变量名的问题

【问题描述】

1.文件test.cpp,使用major做变量名的完整代码如下:

1 #include <fstream>
2 
3 struct Header {
4   int major;
5 
6   Header(int mj)
7     : major(mj)  { }
8 };
9 int main(){}

2.在g++ 编译时,会产生如下错误:

DevNet_30_56_sles10sp1:/data/ackhan # 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(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=17130)

 

【解决办法】

  增加代码"#undef major"即可解决:

 1 #include <fstream>
 2 
 3 #undef major
 4 
 5 struct Header {
 6   int major;
 7 
 8   Header(int mj)
 9     : major(mj)  { }
10 };
11 int main(){}

 

posted @ 2017-08-31 11:41  ackhan  阅读(316)  评论(0)    收藏  举报