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)'
你对这个问题有什么想法吗?
提前致谢!
让我们放慢速度,按照其他示例进行清理:
永远不要同时包含 Rcpp.h
和 RcppArmadillo.h
。它出错了。 RcppArmadillo.h
会在合适的时间为您提供 Rcpp.h
。 (这对生成的代码很重要。)
除非你真的知道你在做什么,否则没必要搞乱RNGScope
。
我建议不要扁平化命名空间。
出于其他地方详细讨论的原因,您可能需要 R 的 RNG。
代码未按发布方式编译:C++ 使用 //
作为注释,而不是 #
。
代码没有像发布的那样编译:犰狳使用不同的矩阵创建。
代码没有 运行 的预期,因为 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)
*/
我的代码如下
#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++ 使用
//
作为注释,而不是#
。代码没有像发布的那样编译:犰狳使用不同的矩阵创建。
代码没有 运行 的预期,因为
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)
*/