我正在使用Rcpp制作R-package。这是一个显示我的设置的MWE:
# include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp ;
class A
{
private:
std::map<int, int> m_map;
public:
void fill_map(const size_t limit)
{
for(size_t i=0; i<limit; ++i)
{
m_map[i] = i;
}
}
size_t size_map(){return m_map.size();}
};
// [[Rcpp::export]]
XPtr<A> func1(const size_t limit)
{
XPtr<A> ptr(new A(), true);
return(ptr);
}
我可以使用sourceCpp
编译它而不会出错。但是,当我使用RccpArmadillo(遵循此tutorial)从此生成包时,编译时出现以下错误:RcppExports.cpp:20:6: error: ‘A’ was not declared in this scope
为什么会出现错误以及如何解决?
注意:本教程适用于在不涉及类时创建包。
答案 0 :(得分:2)
请参阅Rcpp Attributes插图:您可能需要使用定义mypackagename_types.h
创建文件A
。按照惯例,此将包含在生成的界面文件中,并且您的类型A
将为其所知。
一个相当简单的例子是Rblpapi_types.h包中的Rblpapi。您可以看到包含的标头文件on line 4 of the interface file RcppExports.cpp。