redeclared with different access struct __xfer_bufptrs报错解决

redeclared with different access struct __xfer_bufptrs报错解决

问题描述

/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/sstream:301:7: error: 'struct std::__cxx11::basic_stringbuf<_CharT, _Traits, _Alloc>::__xfer_bufptrs' redeclared with different access
       struct __xfer_bufptrs

笔者在bazel编译的时候,出现这个报错
经过排查发现是BUILD里面文件的配置问题
(笔者找过网上的解决办法,目前没有涉及到这个方面的,这篇blog算是这方面问题的一个新补充,希望能够帮到正在阅读的你)

cc_test(
    name = "gtest-wanyouyu",
    srcs = glob([
        "gtest/demo.cpp",
    ]),
    copts = [
        # "-Dprivate=public",
        # "-Dprotected=public",
        # "-rdynamic",
        # "-std=c++14",
        # "-Wno-deprecated",
        # "-DENABLE_LOGGER",

        "-std=c++17",

        # "-gdwarf-2",
        # "-flto",
    ],
    # data = [
    #     ":test_data",
    # ],
    linkstatic = 1,
    deps = [
        # "//framework:framework_lib",
        # "//plugin/index_server/display_ad:display_ad_lib",
        # "@com_github_gflags_gflags//:gflags",
        "@com_google_googletest//:gtest_main",
    ],
)

分析和解决办法

这里的
"-Dprivate=public",
"-Dprotected=public",
要注释掉!

注释完之后问题就解决了

分析:
他们分别的意思是
-Dprivate=public:这个参数会将所有的private关键字替换为public。这意味着原本被声明为私有的类成员(变量和函数)将会被视为公有成员。这样做会破坏类的封装性,因为原本私有的成员现在可以从类的外部被访问和修改。
-Dprotected=public:同样的,这个参数会将所有的protected关键字替换为public。原本被声明为受保护的类成员将会被视为公有成员。受保护的成员原本是可以被类的子类访问的,现在它们也可以被类的外部直接访问。

这两行代码改变了我们代码中的变量的作用域,导致C++编译申明的时候重复,最后报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原创小白变怪兽

帮助原创小白成为怪兽吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值