Ошибка модуля Rcpp с конструктором, принимающим NumericVector & в качестве параметра - PullRequest
0 голосов
/ 06 мая 2019

У меня проблема с конструктором, который выглядит как MyModel :: MyModel (const Rcpp :: NumericVector & ModelData) в приведенном ниже коде.

Это выдает новую ошибку на моей новой версии Mac (clang7 с R 3.6.0) выдает без ошибок с windows и без ошибок с более старыми (<= 3.0.?) Версия R на mac </strong>.

Полагаю, я делаю что-то не так, что раньше давало только предупреждение, и теперь это ошибка Кто-нибудь может помочь? (Я разместил это в списке рассылки 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)

В файле из файла 5a40416569b1.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: error: ссылочный член 't' привязывается к временному объекту, время жизни которого будет короче чем время жизни построенного объекта
Экспортер (SEXP x): t (x) {} ^
/ Библиотека / Каркасы / R.framework / Версии / 3.6 / Ресурсы / Библиотека / Rcpp / include / Rcpp / as.h: 87: 41: примечание: при создании функции-члена 'Rcpp :: traits :: Exporter & > :: Экспортер 'запрашивается здесь
:: Rcpp :: traits :: Exporter exporter (x); ^
/ Библиотека / Каркасы / R.framework / Версии / 3.6 / Ресурсы / Библиотека / Rcpp / include / Rcpp / as.h: 152: 26: note: в экземпляре специализации шаблона функции 'Rcpp :: internal :: as &> 'запрашивается здесь
вернуть внутреннюю :: как (х, типовое имя черты :: r_type_traits :: r_category ()); ^
/ Библиотека / Каркасы / R.framework / Версии / 3.6 / Ресурсы / Библиотека / Rcpp / include / Rcpp / module / Module_generated_Constructor.h: 47: 27: note: в экземпляре специализации шаблона функции 'Rcpp :: as & > 'запрашивается здесь
вернуть новый класс (as (args [0])); ^
/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include/Rcpp/module/Module_generated_class_constructor.h:99:29: примечание: в экземпляре функции-члена 'Rcpp :: Constructor_1 &> :: get_new 'запрашивается здесь
AddConstructor (новый Constructor_1, действительный, строка документа); ^
file5a40416569b1.cpp: 7: 6: примечание: при создании экземпляра шаблона функции специализация 'Rcpp :: class _ :: constructor &>' запрашивается здесь
.конструктор() ^
/ Библиотека / Каркасы / R.framework / Версии / 3.6 / Ресурсы / Библиотека / Rcpp / include / Rcpp / internal / Exporter.h: 35: 9: note: объявленный здесь элемент ссылки Т т; ^
1 ошибка сгенерирована. make: *** [file5a40416569b1.o] Ошибка 1
/ usr / local / clang7 / bin / clang ++ -Wall -
I "/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -
I "/Library/Frameworks/R.framework/Versions/ 3.6 / Resources / library / Rcpp / include "-
I" /private/var/folders/zt/7cz1y9md79l_h08bbqymt4w9z8xlw7/T/RtmpZZ6sit/sourceCpp-x86_64-apple-darwin15.6.0-1.0.1 * 10 38 -isro /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -
I / usr / local / include -fPIC -Wall -g -O2 -c file5a40416569b1.cpp -o file5a40416569b1.o
Ошибка в sourceCpp (code = code):
Ошибка 1 при создании общей библиотеки.

1 Ответ

1 голос
/ 08 мая 2019

Мы только что исправили это в последующем обсуждении списка rcpp-devel, где был представлен минимально полный и поддающийся проверке пример - тратится время, чтобы все не предоставлять его, было сделано здесь изначально.

Короче говоря, мы не можем сделать & для ссылочной семантики с указателем SEXP на объекты S Expression. Простое удаление & исправляет это. Исправленный код ниже.

#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>()
  ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...