0

私は自分で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メソッドをコメントアウトすると、何も変更されないため、バイトバッファーを宣言する必要さえなく、エラーがスローされます。何が原因でしょうか?

4

1 に答える 1

7

このエラーを見てください:

/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>はそのようなマクロを持っていることで知られています...多分誰かが少しコピーしましたか?

于 2012-09-11T12:50:30.467 に答える