我有一个字节缓冲区类,由我自己用c ++编写,我可以对其进行编译,并且它应该可以正常工作。现在我想在一个大项目中使用它,但是当我将它包含在另一个头文件中时,如果我尝试构建它,它将引发错误。这是错误:

  CXX    out.o
In file included from /usr/include/c++/4.6/streambuf:808:0,
                 from /usr/include/c++/4.6/ios:44,
                 from /usr/include/c++/4.6/ostream:40,
                 from /usr/include/c++/4.6/iostream:40,
                 from /path/to/file/src/someheader1.h:29,
                 from /path/to/file/src/someheader2.h:31,
                 from /path/to/file/src/somesource.cpp:24:
/usr/include/c++/4.6/bits/streambuf.tcc: In member function ‘virtual std::streamsize std::basic_streambuf<_CharT, _Traits>::xsgetn(std::basic_streambuf<_CharT, _Traits>::char_type*, std::streamsize)’:
/usr/include/c++/4.6/bits/streambuf.tcc:56:38: error: expected unqualified-id before ‘(’ token
/usr/include/c++/4.6/bits/streambuf.tcc: In member function ‘virtual std::streamsize std::basic_streambuf<_CharT, _Traits>::xsputn(const char_type*, std::streamsize)’:
/usr/include/c++/4.6/bits/streambuf.tcc:90:38: error: expected unqualified-id before ‘(’ token
In file included from /usr/include/c++/4.6/istream:859:0,
                 from /usr/include/c++/4.6/iostream:41,
                 from /path/to/file/src/someheader1.h:29,
                 from /path/to/file/src/someheader2.h:31,
                 from /path/to/file/src/somesource.cpp:24:
/usr/include/c++/4.6/bits/istream.tcc: In member function ‘std::streamsize std::basic_istream<_CharT, _Traits>::readsome(std::basic_istream<_CharT, _Traits>::char_type*, std::streamsize)’:
/usr/include/c++/4.6/bits/istream.tcc:693:46: error: expected unqualified-id before ‘(’ token
make[4]: *** [out.o] Error 1


项目中头文件的框架:

#ifndef _GUARD_
#define _GUARD_

#include <string>
#include <vector>

...

#include "bytebuffer.h"

namespace A {
  namespace B {

    using namespace std;
    using namespace A::C;

    class Myclass {
    public:

    ...

     virtual void save( ByteBuffer& bb ) {
     }

     ...

    } ;
  }
}

#endif


字节缓冲区非常简单,它包含一个数据向量,以及用于不同类型的put和get方法。如果我在标题中注释掉save方法,则没有任何变化,因此我什至不必声明字节缓冲区,它会引发错误。是什么原因造成的?

最佳答案

看这个错误:

/usr/include/c++/4.6/bits/streambuf.tcc:56:38: error: expected unqualified-id before ‘(’ token


我恰好有这个(希望)非常相同的文件,第56行是:

const streamsize __len = std::min(__buf_len, __remaining);
                              ^
                              col 38


为了方便读者,我还标记了第38列。

哦!该错误讨论的是(令牌,但在此位置不是(而是min。所以我的猜测是项目中的某些标头正在定义宏min

#define min(a, b) ((a) < (b) ? (a) : (b))


或类似。

解决方案是找到该标头,然后完全删除宏(我最喜欢的宏),或将其重命名(MIN?),或者在所有标准包含之后移动该标头的包含(并不总是很容易)。

作为注脚,MS无处不在的<windows.h>以拥有这样的宏而闻名...也许有人复制了一点?

关于c++ - 包含自己的 header 时,标准库中出现错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12369951/

10-11 22:41
查看更多