Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用公共访问编译器错误重新声明sstream_C++_Compiler Errors_Sstream - Fatal编程技术网

C++ 使用公共访问编译器错误重新声明sstream

C++ 使用公共访问编译器错误重新声明sstream,c++,compiler-errors,sstream,C++,Compiler Errors,Sstream,在使用gcc5.4.0对大型项目运行make时,我遇到了这个错误 /usr/include/c++/5/sstream:300:14: error: '__xfer_bufptrs' redeclared with 'public' access struct __xfer_bufptrs ^ /usr/include/c++/5/sstream:67:14: note: previously declared 'private' here st

在使用gcc5.4.0对大型项目运行make时,我遇到了这个错误

/usr/include/c++/5/sstream:300:14: error: '__xfer_bufptrs' redeclared with 'public' access
      struct __xfer_bufptrs
             ^
/usr/include/c++/5/sstream:67:14: note: previously declared 'private' here
      struct __xfer_bufptrs;
对我来说,这似乎是编译器的问题?因为这个问题出现在标准的C++库SsFrand中?这对我来说毫无意义,我是不是使用了错误的编译器

以下是错误消息所指的代码段:

1.)从67号线开始的sstream

class basic_stringbuf : public basic_streambuf<_CharT, _Traits>                                   
    {                                                                                                 
      struct __xfer_bufptrs;                                                                          
    public:                                                                                           
我知道标准库不会有任何错误,那么为什么它会抛出错误呢

这是我得到的最接近的答案:


答案似乎围绕着这些“民主”和“民主”的旗帜。我假设它们是编译器标志,但我不确定它们是做什么的。

尽管github的线程达到了目的,但它似乎忽略了原因。您很可能正在项目中构建一些单元或其他测试,这些测试重新定义了“private”关键字,如下所示:

#define private public
或者通过类似(
-Dprivate=public
)的命令执行相应的操作。这是一种常用的做法,用于公开私有成员进行测试,而不会使测试代码依赖于测试代码。 然而,看看你的代码片段。第一个声明将
\uuxfer\u bufptrs
声明为private,而不考虑您对
private
的定义。下一个代码段肯定(但还没有检查)位于显式
private
块中。现在,如果您对private的定义正确,那么您将在第二个代码段中找到
public
,这是一个错误

您至少有两种选择,其他选择当然也可能:

  • 在包含系统头之前,您可以
    #取消定义
    私有定义,并在包含系统头之后重新定义,或者
  • 您可以使用另一个宏来定义自己的私有/公共部分,例如:
    #define my_public
    ,可以随意重新定义。但这个解决方案似乎令人讨厌;)
    哦,将来在您自己的代码中,始终使用显式访问限定来避免这种混乱,至少在您自己的代码中是这样:)

    看起来库维护人员搞砸了。没有人知道这一点吗?也许我没有问最好的方法,但我真的不知道还有什么其他信息可以添加到这个。。。
    #define private public