2013-03-10 40 views
-1

我使用Armadillo作爲我的矩陣庫。同時,我使用OpenFrameworks來開發我的代碼。當我嘗試用犰狳一起使用ofxOpenCv,我得到以下錯誤:Armadillo和ofxOpenCv之間的衝突

/usr/include/armadillo_bits/traits.hpp:在全球範圍內: /usr/include/armadillo_bits/traits.hpp:在實例'const bool arma :: is_arma_type> :: value': ../../../addons/ofxOpenCv/libs/opencv/include/opencv2/core/operations.hpp:753:23:從這裏實例化 /usr/include/armadillo_bits/traits.hpp:584:28:error:'cv ::'是/使用匿名類型 /usr/include/armadillo_bits/traits.hpp:584:28:錯誤:嘗試實例化'template struct arma :: is_subview_elem2' /usr/include/armadillo_bits/traits.hpp:584:28:error:'cv ::'是/使用匿名類型 。 。 。 在我看來,犰狳和ofxOpenCv之間有衝突,但我不知道如何解決這個問題。 任何人都可以提供一些提示來解決這個問題嗎? 問候, Tohid

回答

2

看起來你已經通過調用一個或者多個頭文件「使用命名空間ARMA」包括你的其他庫之前(見接受的答案Conflict between Boost, OpenCV and Eigen libraries?)污染您的命名空間。

您不應該在頭文件中使用「using ...」指令,因爲根據您包含的順序,您可能會包含該頭文件,然後是其他類定義依賴於未受污染的名稱空間的頭文件。

那麼把它們放在哪裏? C++不允許你將它們放入類定義中,因爲它可能會引起作用域的不明確性。您可以在類成員函數的定義中寫入「using namespace」,所以我建議您在需要使用armadillo數據結構的地方進行操作。在其他地方,只是將其範圍,例如arma :: colvec或arma :: mat等。