Rcpp警告:致电' exp'很暧昧

时间:2017-10-09 12:52:51

标签: c++ r rcpp

我正在编写如下的Rcpp代码:

// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::depends(BH)]]
// [[Rcpp::plugins(cpp11)]]

#include <RcppArmadillo.h>
#include <boost/random.hpp>
#include <boost/random/uniform_real_distribution.hpp>
#include <math.h>

using namespace Rcpp;
using namespace std;

// [[Rcpp::export]]

 double ks(const double k, const double alpha, const double  mag, const double M0){
    double ksres;
    ksres=  k* std::exp ( alpha*(mag-M0) );
    return(ksres);
    }

但它显示&#34;呼叫&#39; exp&#39;是暧昧的#34;为什么我会收到此消息,我将如何解决?

当我进入sessionInfo()时:

        R version 3.2.4 (2016-03-10)
        Platform: x86_64-apple-darwin13.4.0 (64-bit)
        Running under: OS X 10.12.6 (unknown)

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] Rcpp_0.12.4

loaded via a namespace (and not attached):
 [1] colorspace_1.2-6 scales_0.4.0     plyr_1.8.3       tools_3.2.4       inline_0.3.14    gtable_0.2.0     rstan_2.9.0-3   
 [8] gridExtra_2.2.1  ggplot2_2.1.0    grid_3.2.4       munsell_0.4.3    stats4_3.2.4  

1 个答案:

答案 0 :(得分:2)

我建议OP关闭或删除。这个问题只展示了一些允许但不推荐的C ++用法:

  • 包含额外的标题:数学标题 已由Rcpp引入(由RcppArmadillo引入)
  • 您永远不需要 cmathmath.h,并且如此处所述,您也不需要
  • 我们通常建议不要无条件地展平所有名称空间

有了这个,你的代码看起来像这样(仍然包含对C ++ 11的调用,但没有使用,但没有任何危害):

// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::depends(BH)]]
// [[Rcpp::plugins(cpp11)]]

#include <RcppArmadillo.h>
#include <boost/random.hpp>
#include <boost/random/uniform_real_distribution.hpp>

// [[Rcpp::export]]
double ks(const double k, const double alpha, const double  mag, const double M0){
    double ksres;
    ksres=  k* std::exp ( alpha*(mag-M0) );
    return(ksres);
}

/*** R
ks(1.0, 2.0, 3.0, 4.0)
*/

这在我的盒子上没有任何警告的情况下编译(打开严格的编译器警告,此处未显示输出)并按预期运行:

R> Rcpp::sourceCpp("/tmp/soQ.cpp")

R> ks(1.0, 2.0, 3.0, 4.0)
[1] 0.135335
R>