[Rcpp-devel] Question regarding integrating preexisting C++ code via Rcpp

Davor Cubranic cubranic at stat.ubc.ca
Tue Oct 11 06:27:39 CEST 2011


Hi Simon,

Are you wrapping your header file with an #ifndef to prevent it from being 
included multiple times?

Davor


On October 10, 2011 03:01:33 PM Simon Fuller wrote:
> Hello,
> 
> I am getting some problems further down the line. It seems to happen when I
> am including a std header in my own class, and when it itself includes a
> header. Which suggests the problem is not with including headers in
> general.
> 
> When it is reading my header, it gets this error in fstream:
> 
> In file included from /usr/include/c++/4.5/fstream:42:0,
>                  from
> /home/simon/College/PackageOne/src/MyClass/MyClass.h:6,
>                  from file8ffc305.cpp:37:
> /usr/include/c++/4.5/bits/codecvt.h: In function ‘SEXPREC*
> file8ffc305(SEXPREC*, SEXPREC*)’:
> /usr/include/c++/4.5/bits/codecvt.h:42:1: error: expected ‘=’ before
> ‘__attribute__’
> /usr/include/c++/4.5/bits/codecvt.h:42:1: error: expected identifier before
> ‘__attribute__’
> /usr/include/c++/4.5/bits/codecvt.h:42:1: error: expected ‘;’ before
> ‘__attribute__’
> /usr/include/c++/4.5/bits/codecvt.h:42:1: error: expected
> primary-expression before ‘__attribute__’
> /usr/include/c++/4.5/bits/codecvt.h:42:1: error: expected ‘;’ before
> ‘__attribute__’
> 
> In fstream, line 42 is indeed: #include <bits/codecvt.h>
> 
> I checked /usr/include/c++/4.5/bits/codecvt.h:42:1:
> 
> and this is line 42 of codecvt.h:
> 
> _GLIBCXX_BEGIN_NAMESPACE(std)
> 
> I googled this function, and I am wondering if it might be a compatibility
> issue, as this sometimes seems to be cited in this regard in forums. I
> really do not know myself. Has anyone any suggestions?
> 
> Thanks,
> 
> Simon
> 
> 
> 
> 
> On Mon, Oct 10, 2011 at 11:09 AM, Simon Fuller
> <simonfuller9 at gmail.com>wrote:h
> 
> > Hello,
> > 
> > I have just joined the mailing list.
> > 
> > I was hoping you might be able to help me with a question.
> > 
> > I am new to Rcpp, have some experience with both R and C++, but very
> > little experience with integrating languages.
> > 
> > I hope to use Rcpp to develop code over the next few years. However, to
> > begin with, I have some preexisting C++ classes that I would like to make
> > available to R.
> > 
> > I have read the documentation that I can find, but I do not know which is
> > the best approach to take.
> > 
> > I only, in principle, need *one method* to interact with the classes -
> > there then follows a fairly arduous process using different tree
> > structures each of which have aggregate classes, but only a single
> > double needs to be returned to R.
> > 
> > I was therefore hoping to simply call a C++ wrapper function in-line,
> > remotely, which in turn called my classes, but that does not work. I get
> > an: "expected unqualified-id before ‘extern’ " error after my includes,
> > at: RcppExport SEXP..  at the start of my method declaration. (I can
> > post code if this approach is not a complete dead end)
> > 
> > So my two questions are: is there a quick way of prototyping this? i.e.
> > to get R to invoke my classes through an rcpp intermediary.
> > 
> > If there is not a quick way to do this, what is the best approach? Do I
> > need to, and if so how do I, make my classes accessible to Rcpp. Because
> > my whole hope here is to use preexisting code as swiftly as possible,
> > 'easiest' and 'quickest' are almost synonyms for 'best' in my question.
> > 
> > If someone could point me in the direction of some example code where
> > Rcpp invokes user classes this would be great.
> > 
> > My apologies if my question has been covered before, but I would really
> > appreciate some advice on what is and is not possible, and some strategic
> > advice on the best (easiest and quickest) approach.
> > 
> > Thank you for your help. It is deeply appreciated.
> > 
> > Simon


More information about the Rcpp-devel mailing list