使用NumericVector&作为参数的构造函数的Rcpp模块错误

时间:2019-05-06 11:24:50

标签: rcpp

我的构造器有一个问题,看起来像 在以下代码中 MyModel :: MyModel(const Rcpp :: NumericVector&ModelData)

它在我的新Mac版本(带有R 3.6.0的clang7)上给出了新错误,在Windows中没有没有错误,而对于较早版本(< <= 3.0。?)在Mac上的R版本。

我想我做错了,以前只给出了警告,现在是错误。有人可以帮忙吗? (我将其发布在Rcpp邮件列表中) 下面是代码和错误。

code='
#include <Rcpp.h>
using namespace Rcpp;
class MyModel{  public: MyModel(const Rcpp::NumericVector& ModelData) {};};
RCPP_MODULE(MyModel){
    Rcpp::class_<MyModel>(\"MyModel\")
    .constructor<const Rcpp::NumericVector &>()
    ;
}'

sourceCpp(code=code)
  

在file5a40416569b1.cpp:2包含的文件中:
  在/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include/Rcpp.h中包含的文件中:27:
  在/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include/RcppCommon.h:168中包含的文件中:
  在/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include/Rcpp/as.h:25中包含的文件中:
      /Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include/Rcpp/internal/Exporter.h:31:30:错误:引用成员't'绑定到一个寿命较短的临时对象比构造对象的寿命
                          出口商(SEXP x):t(x){}                                                  ^       
/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include/Rcpp/as.h:87:41:注意:在实例化成员函数'Rcpp :: traits :: Exporter &> ::出口商'在这里请求
                  :: Rcpp :: traits ::出口商出口商(x);                                               ^       
/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include/Rcpp/as.h:152:26:注意:在实例化功能模板专门化'Rcpp :: internal ::按照&>'在这里请求
              返回internal :: as(x,typename traits :: r_type_traits :: r_category());                                ^       
/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include/Rcpp/module/Module_genic_Constructor.h:47:27:注意:在实例化功能模板专门化'Rcpp :: as &>'在这里请求
              返回新的Class(as(args [0]));                                 ^      
/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include/Rcpp/module/Module_genic_class_constructor.h:99:29:注意:在实例化成员函数'Rcpp :: Constructor_1和> :: get_new'在这里请求
              AddConstructor(new Constructor_1,valid,docstring);                                   ^
      file5a40416569b1.cpp:7:6:注意:在此处实例化功能模板特化'Rcpp :: class _ :: constructor&>'
          .constructor()            ^       
/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include/Rcpp/internal/Exporter.h:35:9:注意:此处引用的参考成员                           吨                             ^      
产生1个错误。       make:*** [file5a40416569b1.o]错误1
      / usr / local / clang7 / bin / clang ++-墙-
I“ /库/Frameworks/R.framework/资源/包含” -DNDEBUG-
I“ /库/Frameworks/R.framework/版本/3.6/资源/库/ Rcpp / include“-
I” /private/var/folders/zt/7cz1y9md79l_h08bbqymt4w9z8xlw7/T/RtmpZZ6sit/sourceCpp-x86_64-apple-darwin15.6.0-1.0.1“ -isysroot
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk-
I / usr / local / include -fPIC -Wall -g -O2 -c file5a40416569b1.cpp -o file5a40416569b1.o       
sourceCpp中的错误(代码=代码):         
建立共享库时发生错误1。

1 个答案:

答案 0 :(得分:1)

我们只是在rcpp-devel列表的后续讨论中修正了该问题,该列表中显示了minimally complete and verifiable example,这浪费了每个人的时间,因此一开始就不提供任何内容。

简而言之,我们无法使用指向S Expression对象的&指针对参考语义进行SEXP。只需删除&即可解决。更正了以下代码。

#include <Rcpp.h>
using namespace Rcpp;

class MyModel {
public:
  double a;
  ~MyModel();
  MyModel();
  MyModel(const Rcpp::NumericVector ModelData, int temp);
};

RCPP_EXPOSED_CLASS(MyModel)

MyModel::~MyModel() {}
MyModel::MyModel() : a(0) {}
MyModel::MyModel(const Rcpp::NumericVector ModelData, int temp) : a(0) {}

RCPP_MODULE(MyModel) {
  Rcpp::class_<MyModel>("MyModel")
  .constructor()
  .constructor<const Rcpp::NumericVector, int>()
  ;
}