从同一 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;
}
这对我来说编译没有错误或警告。
嗨,我有这个 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;
}
这对我来说编译没有错误或警告。