进行单元测试时,常常需要关闭访问控制,一种常见的错误方式是直接#define, 如下
#define private public
#include "xx.hh"
#undef private
此方法过于简单粗暴,在高版本的gcc编译器可能会报错:
/usr/include/c++/11/sstream:447:7: error: ‘struct std::__cxx11::basic_stringbuf<_CharT, _Traits, _Alloc>::__xfer_bufptrs’ redeclared with different access
推荐方法:
编译时添加编译选项-fno-access-control, 以下是Cmake示例:
target_compile_options(your_executable PRIVATE -fno-access-control)