背景:
在进行eigen库进行移植时,总是报编译错误:
error: 'struct std::basic_stringbuf<_CharT, _Traits, _Alloc>::__xfer_bufptrs' redeclared with different access struct __xfer_bufptrs
,单独写一个测试程序使用eigen库,编译跟运行都正常,但继承到项目中就是编译不通过,百思不得其解,后来查看资料,发现是这个项目中在编写单元测试时,修改了代码的访问权限导致的。
问题解决:
1.删除掉代码中修改权限代码。
cpp
// #undef private
// #undef protected
// #define private public
// #define protected public
#include "XXXXX.hpp"
// #undef private
// #undef protected
// #define private private
// #define protected protected
2.在cmakelist中添加编译选项-fno-access-control
bash
set(CMAKE_CXX_FLAGS "-fno-access-control")
使用-fno-access-control 选项可以实现对私有成员的访问,比使用预定义的方式规范。