这是我的R_API.cpp
#include "include/R_GatingSet.hpp"
#include <Rcpp.h>
Rcpp::List getPopCounts(Rcpp::XPtr<GatingSet> gsPtr, StringVec sampleNames, StringVec subpopulation, bool flowJo, bool isFullPath){
//do stuff
}
此处由RcppExports.cpp
compileAttributes
#include <Rcpp.h>
using namespace Rcpp;
// getPopCounts
Rcpp::List getPopCounts(Rcpp::XPtr<GatingSet> gsPtr, StringVec sampleNames, StringVec subpopulation, bool flowJo, bool isFullPath);
RcppExport SEXP flowWorkspace_getPopCounts(SEXP gsPtrSEXP, SEXP sampleNamesSEXP, SEXP subpopulationSEXP, SEXP flowJoSEXP, SEXP isFullPathSEXP) {
BEGIN_RCPP
SEXP __sexp_result;
{
Rcpp::RNGScope __rngScope;
Rcpp::traits::input_parameter< Rcpp::XPtr<GatingSet> >::type gsPtr(gsPtrSEXP );
Rcpp::traits::input_parameter< StringVec >::type sampleNames(sampleNamesSEXP );
}
显然这会使编译器失败,因为它错过了定义用户类R_GatingSet.hpp
的本地头包含(GatingSet
)。
g++ -I/home/wjiang2/R/r-devel/build/include -DNDEBUG -DROUT -Wno-deprecated -I/home/wjiang2/mylib/include/libxml2 -Ibst/ -I/usr/local/include -I"/home/wjiang2/R/r-devel/build/library/Rcpp/include" -fpic -g -O2 -c RcppExports.cpp -o RcppExports.o
RcppExports.cpp:9:36: error: ‘GatingSet’ was not declared in this scope
我想知道是否有更好的解决方案,除了手动将此包含添加回RcppExports.cpp
?
答案 0 :(得分:7)
你应该能够通过一个与你的包同名的头文件来处理这个问题(假设包是flowWorkspace
):
inst/include/flowWorkspace.h
compileAttributes
将在RcppExports.cpp
中包含该头文件,在那里您可以包含其他导出机制所需的类的定义。
编辑:您也可以尝试使用// [[Rcpp::interfaces(r, cpp)]]
属性为您自动生成这些界面(尽管我还没有那么多),但在{{3 } - 见3.5.1。