RcppExport中的错误原因
Cause of error in RcppExport
本文关键字:错误 RcppExport 更新时间:2023-10-16
在我正在RStudio中编辑的.cpp文件中,以下代码
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
using namespace Rcpp;
using namespace arma;
// [[Rcpp::export]]
mat mkGramMatrix (mat X, int n, double (*kernel) (mat, mat, double), double k_param=0){
double (*func_kernel) (mat, mat, double);
func_kernel = kernel;
mat K(n, n);
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
K(i, j) = func_kernel(X.row(i), X.row(j), k_param);
}
}
return K;
}
当我尝试在 RStudio 内部源代码时产生以下错误:
KFDA_Rcpp.cpp:138:63: error: cannot combine with previous 'type-name' declaration specifier
RcppExport SEXP sourceCpp_32_mkGramMatrix(SEXP XSEXP, SEXP nSEXP, SEXP double)SEXP, SEXP k_paramSEXP) {
^
KFDA_Rcpp.cpp:138:70: error: expected ';' after top level declarator
RcppExport SEXP sourceCpp_32_mkGramMatrix(SEXP XSEXP, SEXP nSEXP, SEXP double)SEXP, SEXP k_paramSEXP) {
^
;
KFDA_Rcpp.cpp:138:74: error: expected unqualified-id
RcppExport SEXP sourceCpp_32_mkGramMatrix(SEXP XSEXP, SEXP nSEXP, SEXP double)SEXP, SEXP k_paramSEXP) {
^
3 errors generated.
为什么要在右括号中放置
SEXP double)SEXP
当我相信我正确使用了函数指针时?我已经成功编译并使用了其他 RcppArmadillo 函数,没有问题,但这是我制作的第一个利用函数指针的函数,因此我可以在调用此函数时指定内核。
您不能在接口中放置函数指针,因为它不是映射到SEXP
的类型。
我们只能从 R 调用映射到.Call()
接口的函数,该接口需要SEXP
参数---因此我们可以使用具有映射器的类型SEXP
。
最简单的方法是使用 Rcpp::XPtr
.它提供了一个"外部指针接口",您可以通过该接口传递内核函数。在 mkGramMatrix()
函数中,您可以将XPtr
取消引用为要调用的函数。这里有几篇帖子 和 Rcpp 画廊 可以帮助您入门。 这是一个很棒的机制:坚持下去并阅读它。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- RcppExport中的错误原因