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++ 编译时,会产生如下错误:

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

 

【解决办法】

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

#include <fstream>

#undef major

struct Header {
  int major;

  Header(int mj)
    : major(mj)  { }
};
int main(){}

 

posted @ 2017-08-31 11:49  ackhan  阅读(594)  评论(0编辑  收藏  举报