【发布时间】:2013-11-13 18:34:16
【问题描述】:
我猜这是一个简单的问题,但我是 Cpp 的新手,并且被卡住了。
我在 R 中创建了一个函数,使用 Rcpp 和:
// [[Rcpp::export]]
我可以在 R 中调用该函数,它按预期工作。我们就叫它F1吧。
接下来,我想使用调用第一个函数的Rcpp 创建另一个函数F2。我使用标准函数调用语言(即F1(arguments)),当我使用sourceCpp()时,它通过R编译得很好。
但是当我尝试在 R 中调用 F2 时,我得到:
.Primitive(".Call") 中的错误(
和
F2 不见了
第一个.cpp文件包含
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double F1(NumericVector a) {
int n = a.size();
double result=0; // create output vector
double ss = 0;
for(int i = 0; i < n; ++i) {
ss += pow(a[i],2);
}
result = ss;
return result;
}
以下是另一个 .cpp 文件。
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double F2(NumericVector a) {
double result=0;
result = F1(a);
return result;
}
【问题讨论】:
-
这是模糊的。请显示您尝试使用的代码。
-
谢谢。我明白你现在想做什么。
-
感谢分享代码。您在此处所做的操作不适用于普通 C++,或者第二个 C++ 文件没有 F1 声明。通常,在标题中会有共同的声明。罗曼在他的回答中显示的内容有效,但必须被视为一种黑客行为。了解多文件 C++ 项目。或者将内容保存在一个文件中。
-
您实际上可以为第一个脚本创建头文件,例如
first.h,然后在第二个cpp 文件中写入#include "a.h"以导入第一个中的函数。通常,“a.h”声明函数的签名,“a.cpp”实现它。