从同一 cpp 文件中的函数调用 Rcpp 函数

Rcpp function call from function in the same cpp file

嗨,我有这个 rcpp 文件:

#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::export]]

int ricercamin (NumericVector p, NumericVector u, int n1){

   int trovato=0;
int m;
int i=0;
while(trovato==0 & i<n1){
    if(u[i]==1){
        trovato=1;
        m=i;
    }
    else{
        i++;
    }
}
for(i=0;i<n1;i++){
    if(p[i]<p[m]){
        m=i;
    }
}
return m;
}

}

// [[Rcpp::export]]

NumericMatrix trai (NumericMatrix weigth, CharacterVector src, CharacterVector rn){

int n=weigth.nrow();
NumericVector potenziale[n];
NumericVector predecessore [n];
NumericVector insieme [n];
int i,j,k;
 for(i=0;i<n;i++){
    j=ricercamin(potenziale,insieme,n);


.....
}

错误是: 使用未声明的标识符 'ricercamin'

我该如何解决这个问题?

好像没有找到函数,但是函数在同一个cpp文件中,声明在函数调用之前。

您的示例代码无法编译,因为大括号不平衡并且源代码中的文字 .... 可能不是您想要的。无论如何,我已将您的代码缩减到我认为是问题核心的部分:

#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::export]]
int ricercamin (NumericVector p, NumericVector u, int n1){
    return 0;
}


// [[Rcpp::export]]
NumericMatrix trai (NumericMatrix weigth, CharacterVector src, CharacterVector rn){

    int n=weigth.nrow();
    NumericVector potenziale[n];
    NumericVector insieme [n];
    int i,j;
    for(i=0;i<n;i++){
        j=ricercamin(potenziale,insieme,n);
    }
    return weigth;
}

编译这个我没有得到引用的消息而是:

58911878.cpp: In function ‘Rcpp::NumericMatrix trai(Rcpp::NumericMatrix, Rcpp::CharacterVector, Rcpp::CharacterVector)’:
58911878.cpp:19:22: error: could not convert ‘(Rcpp::NumericVector*)(& potenziale)’ from ‘Rcpp::NumericVector*’ {aka ‘Rcpp::Vector<14, Rcpp::PreserveStorage>*’} to ‘Rcpp::NumericVector’ {aka ‘Rcpp::Vector<14, Rcpp::PreserveStorage>’}
   19 |         j=ricercamin(potenziale,insieme,n);
      |                      ^~~~~~~~~~
      |                      |
      |                      Rcpp::NumericVector* {aka Rcpp::Vector<14, Rcpp::PreserveStorage>*}
make: *** [/usr/lib/R/etc/Makeconf:176: 58911878.o] Error 1

现在这条错误消息告诉我一些有用的信息:函数 ricercamin 需要一个 NumericVector,但我给它一个指向 的指针 15=]。正确的修复取决于变量 potenziale 应该包含的内容。既然你在评论中提到了 "a NumericVector of size n",你应该使用 (n) 而不是 [n],因为后者声明了一个 array of NumericVector小号:

#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::export]]
int ricercamin (NumericVector p, NumericVector u, int n1){
    return 0;
}


// [[Rcpp::export]]
NumericMatrix trai (NumericMatrix weigth, CharacterVector src, CharacterVector rn){

    int n=weigth.nrow();
    NumericVector potenziale(n);
    NumericVector insieme(n);
    int i,j;
    for(i=0;i<n;i++){
        j=ricercamin(potenziale,insieme,n);
    }
    return weigth;
}

这对我来说编译没有错误或警告。