如何解决RcppArmadillo:C函数'SEXPREC * sourceCpp_1_hhSEXP,SEXP,SEXP'的声明冲突
我的代码如下
#include <RcppArmadillo.h>
#include <Rcpp.h>
using namespace std;
using namespace Rcpp;
using namespace arma;
//RNGScope scope;
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::mat hh(arma::mat Z,int n,int m){
if(Z.size()==0){
Z = arma::randu<mat>(n,m); # if matrix Z is null,then generate random numbers to fill in it
return Z;
}else{
return Z;
}
}
报告错误:
conflicting declaration of C function 'SEXPREC* sourceCpp_1_hh(SEXP,SEXP,SEXP)'
您对这个问题有任何想法吗?
提前谢谢!
解决方法
让我们放慢速度并进行清理,以下是其他示例:
-
从不同时包含
Rcpp.h
和RcppArmadillo.h
。错误。RcppArmadillo.h
会在适当的时候为您提供Rcpp.h
。 (这对于生成的代码很重要。) -
除非您真的知道自己在做什么,否则无需弄混
RNGScope
。 -
我建议不要拼合名称空间。
-
出于其他原因详尽讨论的原因,您可能需要R的RNG。
-
代码未按发布日期进行编译:C ++使用
//
进行注释,而不使用#
。 -
该代码无法按发布要求进行编译:Armadillo使用不同的矩阵创建方式。
-
代码未按预期运行,因为
size()
不是您想要的。我们也不允许“零元素”矩阵进入,这可能对我们不利。
也就是说,修复后,我们现在可以针对略有变化的规格获得正确的行为:
输出量R> Rcpp::sourceCpp("~/git/stackoverflow/63984142/answer.cpp")
R> hh(2,2)
[,1] [,2]
[1,] 0.359028 0.775823
[2,] 0.645632 0.563647
R>
码
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::mat hh(int n,int m) {
arma::mat Z = arma::mat(n,m,arma::fill::randu);
return Z;
}
/*** R
hh(2,2)
*/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。