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

Simon Fuller simonfuller9 at gmail.com
Tue Oct 11 11:53:11 CEST 2011


Hello,

I have run a couple more tests.

I commented out: #include <fstream>

I then got the same error for #include <queue>, i.e:


In file included from /usr/include/c++/4.5/queue:65:0,
                 from /home/simon/College/PackageOne/src/BZip/BZip.h:11,
                 from file21028e73.cpp:37:
/usr/include/c++/4.5/bits/stl_queue.h: In function ‘SEXPREC*
file21028e73(SEXPREC*, SEXPREC*)’:
/usr/include/c++/4.5/bits/stl_queue.h:63:1: error: expected ‘=’ before
‘__attribute__’
/usr/include/c++/4.5/bits/stl_queue.h:63:1: error: expected identifier
before ‘__attribute__’
/usr/include/c++/4.5/bits/stl_queue.h:63:1: error: expected ‘;’ before
‘__attribute__’
/usr/include/c++/4.5/bits/stl_queue.h:63:1: error: expected
primary-expression before ‘__attribute__’
/usr/include/c++/4.5/bits/stl_queue.h:63:1: error: expected ‘;’ before
‘__attribute__’


I checked stl_queue.h, line 62:

GLIBCXX_BEGIN_NAMESPACE(std).

To be safe, I wrote a couple of quick codes that use the relevant includes,
and these work fine when using g++ from the terminal, so I do not think that
it is my c++ sources as such that are causing the problem, as far as I can
ascertain myself.

Thanks again for all your help.




On Tue, Oct 11, 2011 at 10:10 AM, Simon Fuller <simonfuller9 at gmail.com>wrote:

> Hello Davor,
>
> Yes, I think - I have:
> #ifndef HEADERNAME_IN_CAPS
> #define HEADERNAME_IN_CAPS 1
> (..code..)
> #endif
> for all my headers.
>
> As far as I can tell the problem arises when fstream includes
> codecvt.h, which calls, on line 42:
>
> _GLIBCXX_BEGIN_NAMESPACE(std)
>
> I don't think this pertains to my own header includes, but I could very
> well be wrong.
>
> Thanks,
>
> Simon
>
>
>
> On Tue, Oct 11, 2011 at 5:27 AM, Davor Cubranic <cubranic at stat.ubc.ca>wrote:
>
>> 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
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20111011/c9c3b64f/attachment-0001.htm>


More information about the Rcpp-devel mailing list