Message-ID: <5006F817-370D-4279-9CC9-2F7BE133DE8A@r-enthusiasts.com>
Date: 2013-03-06T07:23:23Z
From: Romain Francois
Subject: [Rcpp-devel] Initiate NumericMatrix in class constructor from S4 slot
In-Reply-To: <8568E246-BEF6-4535-ACC5-63AFFE2C8545@uni-bonn.de>
There is no constructor of Matrix tht takes a SlotProxy. You can do it in two steps perhaps.
SEXP tmp = classS4.slot("M_R") ;
M = tmp ;
Or use a specific cast:
> M((SEXP)classS4.slot("M_R"));
In any case, you should use an initialisation list in your constructor anyway, something like:
> FirstClass::FirstClass(Rcpp::S4& classS4) : M( (SEXP)classS4.slot("M_R")) {}
Hiwever, i will add the missing constructor if this does not break anything else.
Romain
Le 6 mars 2013 ? 08:14, Simon Zehnder <szehnder at uni-bonn.de> a ?crit :
> Dear Rcpp-Devels,
>
> I am a little confused right now with the following setting:
>
> I have a C++ class with for example the following header
>
> #include <RcppArmadillo.h>
>
> class FirstClass {
>
> public:
> Rcpp::NumericMatrix M;
>
> FirstClass(Rcpp::S4& classS4);
> ~FirstClass();
> }
>
> Then, in the .cc file I have:
>
> #include <RcppArmadillo.h>
> #include "FirstClass.h"
>
> FirstClass::FirstClass(Rcpp::S4& classS4) {
>
> M(classS4.slot("M_R")); // array M_R in R
> };
>
> FirstClass::~FirstClass(){};
>
> Now, my compiler always gives me an error:
>
> error: no match for call to ?(Rcpp::NumericMatrix {aka Rcpp::Matrix<14>}) (Rcpp::RObject::SlotProxy)?
>
>
> Do I have to create the Matrix in the constructor differently? I want to reuse memory allocated in R. Further, could the error be triggered by M_R being an array in R?
>
> Best
>
> Simon
>
>
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel