首页 > 解决方案 > 从同一 cpp 文件中的函数调用 Rcpp 函数

问题描述

嗨,我有这个 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 文件中,并且声明在乐趣的调用之前。

标签: rcpp

解决方案


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

#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需要 a NumericVector,但我给它一个指向a的指针NumericVector。正确的修复取决于变量potenziale应该包含的内容。由于您在评论中提到“大小为 n 的 NumericVector”,因此您应该使用(n)而不是[n],因为后者声明了一个s数组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;
}

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


推荐阅读