RcppArmadillo:C 函数声明冲突 'SEXPREC* sourceCpp_1_hh(SEXP, SEXP, SEXP)'

RcppArmadillo: conflicting declaration of C function 'SEXPREC* sourceCpp_1_hh(SEXP, 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)'

你对这个问题有什么想法吗?

提前致谢!

让我们放慢速度,按照其他示例进行清理:

  1. 永远不要同时包含 Rcpp.hRcppArmadillo.h。它出错了。 RcppArmadillo.h 会在合适的时间为您提供 Rcpp.h。 (这对生成的代码很重要。)

  2. 除非你真的知道你在做什么,否则没必要搞乱RNGScope

  3. 我建议不要扁平化命名空间。

  4. 出于其他地方详细讨论的原因,您可能需要 R 的 RNG。

  5. 代码未按发布方式编译:C++ 使用 // 作为注释,而不是 #

  6. 代码没有像发布的那样编译:犰狳使用不同的矩阵创建。

  7. 代码没有 运行 的预期,因为 size() 不是您想要的。我们也不会让 'zero element' 矩阵进入——这可能是对我们的限制。

也就是说,修复后,我们现在可以针对稍微更改的规格获得正确的行为:

输出
R> Rcpp::sourceCpp("~/git/Whosebug/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)
*/