我正在編譯一個項目,其中包含並鏈接到MySQL ++的XCode。出於某種原因,我不斷收到以下編譯器錯誤:「'assert'未在此範圍內聲明」在MySQL ++
「斷言」未聲明在此範圍內從cpool.h
始發,頭文件,該文件的MySQL ++的一部分。有誰知道爲什麼這會被觸發?
編輯:作爲參考,MySQL ++通過Macports安裝。
我正在編譯一個項目,其中包含並鏈接到MySQL ++的XCode。出於某種原因,我不斷收到以下編譯器錯誤:「'assert'未在此範圍內聲明」在MySQL ++
「斷言」未聲明在此範圍內從cpool.h
始發,頭文件,該文件的MySQL ++的一部分。有誰知道爲什麼這會被觸發?
編輯:作爲參考,MySQL ++通過Macports安裝。
最明顯的答案是「assert.h」未被包含或未在您的包含路徑中找到。另一種解釋是assert宏在包含標題後的某個時間點未定義。
編輯:既然你說包含了assert.h,並且我們現在假設它是被發現的,因爲它是一個標準頭,那麼這給我們留下了上述的最後一種可能性,即宏有未定義。
因爲cpool.h本身不會這樣做,所以必須是assert.h先前由您自己或間接由另一個第三方頭包含的情況,以及在您和您的包含cpool.h之間發生的未定義。這可以通過將cpool.h include移動到文件頂部來輕鬆進行測試。
代理通過以下方式包含該文件:#include
@Anonymous:是包含mysql ++。h頭文件的文件嗎? – Troubadour 2010-05-25 23:26:38
是的,但移動它正確的.cpp文件仍然會產生相同的錯誤。 – Anonymous 2010-05-25 23:30:50
可能是因爲include路徑中的另一個庫有一個不同的「assert.h」文件,而且您不知不覺地將其中包含該文件,而不是系統的標準<assert.h>。
編寫在Mac OSX上使用gstreamer的應用程序時,遇到了這個問題。事實證明,gstreamer的include目錄(/Library/Frameworks/GStreamer.framework/Headers)包含一個文件「assert.h」,它是非標準的,並且不適合替代真正的assert.h。當我將-I/Library/Frameworks/GStreamer.frameworks/Headers添加到我的編譯命令中時,突然發現我的源代碼,其中包括gstreamer版本,其中只包含「#include <assert.h>」。這導致我的編譯失敗,出現同樣的錯誤。
在C++中添加cassert頭可以解決你的問題。
#include <cassert>
請發佈完整的錯誤信息,因爲它通常包含行號。 'cpool.h'中的ASSERT失敗了嗎? – 2010-05-25 22:53:27
斷言在78行失敗, virtual〜ConnectionPool(){assert(empty()); } 是的,assert.h被包含在內。 – Anonymous 2010-05-25 23:01:47
另外,MySQL ++通過Macports安裝。 – Anonymous 2010-05-25 23:09:29