rcpp - 从同一 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 文件中,并且声明在乐趣的调用之前。
解决方案
您的示例代码无法编译,因为大括号不平衡,并且....
源代码中的文字可能不是您想要的。无论如何,我已将您的代码简化为我认为是问题的核心:
#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;
}
这对我来说编译时没有错误或警告。
推荐阅读
- flutter - 在 Google Maps Flutter 中为折线制作动画
- onesignal - 错误:找不到符号导入 com.onesignal.OSNotificationOpenResult;
- swift - 如何快速引用结构/类中的类
- kotlin - Kotlin 高阶函数尚不支持对变量的引用
- javascript - Window.open() 中的两种通信方式
- sql - 如何构建复杂的sql查询?
- python - Python。“.readline”、“.readlines”方法问题。它是如何工作的
- java - 如何在 Spring Boot 嵌入式 Tomcat 中启用 TLS Fallback SCSV
- sas - SAS用表中的字符串值替换字符串
- python - 如何测试加载 tflite 模型并在一张图像上进行测试