C++ 使用公共访问编译器错误重新声明sstream
在使用gcc5.4.0对大型项目运行make时,我遇到了这个错误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
/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