Hi Simon, Thank you - that indeed fixes the first problem (about cout). It still leaves the second error, though:
main.cpp:52: error: brace-enclosed initializer used to initialize 'R_NativePrimitiveArgType*' Any ideas about that? Thanks again for the first suggestion, anyway, and I'll keep your point about cout in mind. Jos On 4/4/07, Simon Urbanek <[EMAIL PROTECTED]> wrote: > Jos, > > you omitted the crucial part but my guess would be that all you have > to do is to put #include <iostream> *before* R headers includes (R > defines "length" which throws off iostream). > Also note that using cout is not a good idea, because it is not > captured by R, you should be using Rprintf instead. > > Cheers, > Simon > > On Apr 4, 2007, at 1:44 PM, Jos Elkink wrote: > > > Hi, > > > > I am trying to use existing C++ code from R. I have no problems > > compiling C code and using it in R, but with C++ I'm running into > > problems. > > > > Here's the compiler output: > > > > Macintosh-10:~/Desktop/dissertation/Model - CPP version/R labguest$ > > g++ -I/Library/Frameworks/R.framework/Resources/include > > -I/Library/Frameworks/R.framework/Resources/include/i386 *.cpp > > In file included from /usr/include/c++/4.0.0/bits/locale_facets.h: > > 1533, > > from /usr/include/c++/4.0.0/bits/basic_ios.h:44, > > from /usr/include/c++/4.0.0/ios:50, > > from /usr/include/c++/4.0.0/ostream:44, > > from /usr/include/c++/4.0.0/iostream:44, > > from main.cpp:5: > > /usr/include/c++/4.0.0/bits/codecvt.h:217:45: error: macro "length" > > passed 4 arguments, but takes just 1 > > /usr/include/c++/4.0.0/bits/codecvt.h:216: error: expected ';' > > before 'const' > > /usr/include/c++/4.0.0/bits/codecvt.h:220: error: expected `;' > > before 'int' > > main.cpp:51: error: brace-enclosed initializer used to initialize > > 'R_NativePrimitiveArgType*' > > > > > > Line 51 refers to the standard part to register the function in R: > > > > R_CMethodDef cMethods[] = { > > {"runSimulation", (void* (*) ()) &runSimulation, 27, {INTSXP, > > INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, > > INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, > > INTSXP, INTSXP, INTSXP, INTSXP, INTSXP, INTSXP, INTSXP, REALSXP, > > REALSXP, REALSXP}}, > > {NULL, NULL, 0} > > }; > > > > > > I had to add the explicit cast of &runSimulation to get rid of one > > compiler error, but do not know how to deal with this one. > > Encapsulating this part of the code in > > > > extern "C" { > > } > > > > has no effect. > > > > runSimulation is just a regular function, with a lot of int* and > > double* parameters, and it is not part of a class. It does inside > > create a class, though. > > > > Outline: > > > > void runSimulation(int *p_1 ... etc) { > > > > try { > > CModel Model(); > > Model.Run(); > > } catch (CException& e) { > > cout << "exception" << endl; > > } > > } > > > > Encapsulating this function in extern "C" also has no effect. > > > > Anyone any ideas what I should do? The system I am using is an > > Intel-based Mac. > > > > Thanks in advance! > > > > Jos > > > > ______________________________________________ > > R-devel@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > > > > -- Jos Elkink PhD Candidate, Trinity College Dublin HMDC Fellow, Harvard University http://jaeweb.cantr.net ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel