调用 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()
函数定义为uvec
。
X2
是 vec
和 nbins
是 int
。
我不确定是否理解错误:似乎conv()
没有将vec
或uvec
作为参数,但在检查了犰狳网站后它必须这样做。
我尝试将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<armadillo>
之前添加:#define ARMA_DONT_USE_WRAPPER
执行此操作后,文档中给出的conv()
示例有效。
所以我修改了我的代码,将hist3
转换为vec
:
arma::vec hist3=arma::conv_to<arma::vec>::from(arma::hist(X2,nbbins));
然后就成功了!
【讨论】:
以上是关于调用 conv 没有匹配的函数(犰狳库)的主要内容,如果未能解决你的问题,请参考以下文章