场景
在gtest测试中,由于要测试非public成员,于是重新定义了“private”关键字,如下
#define private public
结果编译时遇到下面的问题:
剖析
这种宏定义的方式,改变了private的作用范围,会导致其他头文件中的private被重定义。具体可参考stackoverflow上的解释(sstream-redeclared-with-public-access-compiler-error)
解决方法
1.使用#undef在包含系统头文件之前的私有定义并在包含这些头文件后再次定义,或者
2.使用另一个宏来定义自己的私有/公共部分,例如:#define my_public public可以随意重新定义。(这个解决方案似乎很恶心)
for the future in your own code always use explicit access qualification to avoid this sort of mess at least with your own code(为了将来在您自己的代码中始终使用显式访问限定来避免这种混乱,至少在你自己的代码中是这样的)