我有一个类和一个指向c ++中类实例的指针向量。我希望能够使用Rcpp查询R中的两种对象。但是,我班级的数据成员似乎无缘无故地被破坏了。由于我无法一致地重现错误,因此我猜测它与释放的内存有关,而不应该有。
我也尝试过设计自己的容器类,但遇到了同样的问题。
下面我尝试制作一个最小的例子
#include <Rcpp.h>
using namespace Rcpp;
class Element{
private:
int x;
public:
Element() : x(0){};
Element(int x_) : x(x_){};
void display() {Rcpp::Rcout << x << std::endl;}
};
typedef std::vector<Element*> Container;
RCPP_EXPOSED_CLASS(Element)
//R Side
RCPP_MODULE(mod){
class_<Element>("Element")
.constructor<int>()
.method("display", & Element::display);
class_<Container>("Container")
.constructor()
.constructor<int>()
.method("push_back", & Container::push_back)
.const_method("at", & Container::at )
.const_method("size", & Container::size )
;
}
/*** R
container <- new(Container)
container$push_back( new(Element, 5))
container$push_back( new(Element, 6))
container$size()
myElements <- list()
myElements[[1]] <- container$at(0)
myElements[[1]]$display()
*/
我不得不在R中再查询几次以获得下面的错误是我的输出
> Rcpp::sourceCpp('src/Element.cpp')
> container <- new(Container)
> container$push_back( new(Element, 5))
> container$push_back( new(Element, 6))
> container$size()
[1] 2
> myElements <- list()
> myElements[[1]] <- container$at(0)
> myElements[[1]]$display()
5
> myElements[[2]] <- container$at(1)
> myElements[[1]]$display()
5
> myElements[[2]]$display()
6
> myElements[[1]]$display()
61412608
编辑: 在添加两个函数
之后,我能够在Windows环境中编译它Element* container_at(std::vector<Element*> * vec, int i){
return vec->at(i);
}
int container_size(std::vector<Element*> * vec){
return vec->size();
}
并替换
.const_method("at", & Container::at )
.const_method("size", & Container::size )
带
.method("at", & container_at )
.method("size", & container_size )
答案 0 :(得分:0)
这是一个错误。你能在这里记录:https://github.com/RcppCore/Rcpp/issues?state=open
我很清楚它可能是什么以及如何修复它,但我可能没有时间待几天。