2013-03-10 109 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等。