-1

我使用犰狳作为我的矩阵库。同时,我使用 OpenFrameworks 来开发我的代码。当我尝试将 ofxOpenCv 与 Armadillo 一起使用时,出现以下错误:

/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:错误:'cv::'是/使用匿名类型 /usr/include/armadillo_bits/traits.hpp:584:28:错误:试图实例化 'template struct arma::is_subview_elem2' /usr/include/armadillo_bits/traits.hpp:584:28:错误:'cv ::' 是/使用匿名类型。. . 在我看来,犰狳和ofxOpenCv之间存在冲突,但我不知道如何解决这个问题。有人可以给出一些提示来解决这个问题吗?问候,托希德

4

1 回答 1

2

在包含其他库之前,您似乎已经通过在一个或多个头文件中调用“使用名称空间 arma”来污染您的名称空间(请参阅对Boost、OpenCV 和 Eigen 库之间的冲突的接受答案?)。

您不应该在头文件中使用“using ...”指令,因为根据您包含它们的顺序,您可能会包含该头文件,然后包含另一个头文件,其类定义依赖于未污染的命名空间。

那么把它们放在哪里呢?C++ 不允许您将它们放在类定义中,因为它可能会导致范围不明确。您可以在类成员函数的定义中编写“使用命名空间”,因此我建议您在需要犰狳数据结构的任何地方都这样做。在其他任何地方,只需确定它的范围,例如 arma::colvec 或 arma::mat 等。

于 2013-03-26T20:37:56.607 回答