Ошибка в стандартной библиотеке при включении собственного заголовка

У меня есть класс bytebuffer, написанный на 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 в заголовке, ничего не изменится, поэтому мне даже не нужно объявлять буфер байтов, он выдает ошибку. Что может вызвать это?

0

Решение

Посмотрите на эту ошибку:

/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> известен тем, что имеет такой макрос … может, кто-то немного скопировал?

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]