我的构造器有一个问题,看起来像 在以下代码中 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。
答案 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>()
;
}