MySQL ++が含まれてリンクされているXCodeでプロジェクトをコンパイルしています。何らかの理由で、次のコンパイラ エラーが発生し続けます。
'assert' はこのスコープで宣言されていません
MySQL++ の一部であるヘッダー ファイル cpool.h に由来します。なぜこれがトリガーされているのか誰にもわかりますか?
編集: 参考までに、MySQL++ は Macports 経由でインストールされました。
最も明白な答えは、「assert.h」がインクルードされていないか、インクルードパスに見つからないということです。もう1つの説明は、ヘッダーが含まれた後のある時点で、assertマクロが未定義になっていることです。
編集:assert.hが含まれていると言っているので、それは標準ヘッダーであるため、今のところ見つかっていると想定します。これにより、上記で述べた最後の可能性、つまりマクロが未定義であることがわかります。
cpool.h自体はこれを行わないため、assert.hが以前に自分で、または別のサードパーティヘッダーによって間接的に含まれており、これとcpool.hを含めることの間に未定義が発生している必要があります。これは、cpool.hincludeをファイルの先頭に移動することで簡単にテストできます。
C++ では、cassert ヘッダーを追加すると問題が解決するはずです。
#include <cassert>
インクルード パス内の別のライブラリに別の「assert.h」ファイルがあり、システムの標準の <assert.h> の代わりに無意識のうちにそのファイルをインクルードしている可能性があります。
Mac OSX で gstreamer を使用するアプリケーションを作成しているときに、この問題に遭遇しました。gstreamer のインクルード ディレクトリ (/Library/Frameworks/GStreamer.framework/Headers) には、非標準であり、実際の assert.h の不適切な置き換えであるファイル「assert.h」が含まれていることが判明しました。-I/Library/Frameworks/GStreamer.frameworks/Headers をコンパイル コマンドに追加すると、突然ソースに「#include <assert.h>」と表示され、gstreamer バージョンが含まれます。これにより、コンパイルが失敗し、同じエラーが発生しました。