调用 conv 没有匹配的函数(犰狳库)

Posted

技术标签:

【中文标题】调用 conv 没有匹配的函数(犰狳库)【英文标题】:No matching function for call to conv (armadillo library) 【发布时间】:2017-01-11 17:59:44 【问题描述】:

我有一些 matlab 脚本要翻译成 C++,所以我决定将 Armadillo 库用于线性代数部分。 但我被 conv() 功能阻止了。我试过这个:

hist2=arma::hist(X2,nbins);
arma::vec g (smoothingWindowWidth, 0.0);
int halfWidth = smoothingWindowWidth/2;
for (int i=0; i<smoothingWindowWidth; i++)

    int n=i - halfWidth;
    g[i]= exp(-0.5 *((n/((double)halfWidth))*(n/((double) halfWidth))));

g=g/(arma::sum(g));
arma::vec hist3= arma::conv(hist2,g,"same");

当我尝试编译时,我收到以下错误:“no matching function for call to 'conv(arma::uvec&,arma::vec&,int)'”。

hist2 之前已使用hist() 函数定义为uvecX2vecnbinsint

我不确定是否理解错误:似乎conv() 没有将vecuvec 作为参数,但在检查了犰狳网站后它必须这样做。

我尝试将uvec 转换为vec,但没有任何改变。

感谢您的帮助!

【问题讨论】:

"same" 不是 int。 我太专注于我的向量,以至于我没有注意到“int”部分。我不明白为什么'same'会是一个int。我尝试输入与示例中的文档相同的“相同”,但它仍然不起作用。错误是'没有匹配函数调用'conv(arma::uvec&,arma::vec&,const char [5])' @RomainMartin - 您可能使用的是旧版本的犰狳,它没有最新的conv() 功能。删除之前的版本,安装latest版本。 @mtall - 事实是我已经拥有最新版本 7.600.2 :/ 是否可能没有正确安装?这会很奇怪,因为我可以毫无问题地使用其他功能。可能是因为我没有使用 C++11 标准? 事实上我尝试了网站的例子,我得到另一个错误:'未定义引用'wrapper_ddot_'。我认为 Armadillo 所需的某些软件包尚未正确安装或链接。我会这样看。 【参考方案1】:

好的,最后答案很简单:conv() 不允许混合类型,所以我不得不使用两个vec 而不是一个vec 和一个uvec

我很确定我已经尝试过了,但此时我的安装可能有问题。

所以我正确地重新安装了犰狳,确保犰狳找到了 Lapack 和 BLAS。

然后我在 #include&lt;armadillo&gt; 之前添加:#define ARMA_DONT_USE_WRAPPER

执行此操作后,文档中给出的conv() 示例有效。

所以我修改了我的代码,将hist3 转换为vec

arma::vec hist3=arma::conv_to<arma::vec>::from(arma::hist(X2,nbbins));

然后就成功了!

【讨论】:

以上是关于调用 conv 没有匹配的函数(犰狳库)的主要内容,如果未能解决你的问题,请参考以下文章

Armadillo 在 iOS 上调用内部加速库

使用 websocketpp 时“调用绑定没有匹配的函数”

没有匹配的函数用于调用未解析的重载函数类型

c ++犰狳库中的sort_index()函数给出错误的结果

rcpp中没有匹配的调用函数

错误:没有匹配的调用函数