Skip to content

[Rcpp-devel] ‘_’ was not declared in this scope

2 messages · Vincent Arel-Bundock, Dirk Eddelbuettel

#
Hi all,

Apologies for the newbie question, but I am trying to build my first R
package with a Rcpp function, and I am running into some issues with
Sugar expressions not compiling. I tried to model my package on one of
the RcppExamples, and put the code pasted below in the file
/src/ar1.cpp. There's also an R function in /R/ar1.R with a simple
.Call to the c++ function. I build the package, but when I try to
install it from source using 'R CMD INSTALL mypackage.tar.gz', I get
the error pasted below. But the example works fine with the inline
package.

I am running R 2.12 on Ubuntu 11.04.

Thanks for your time!

Vincent

### Error:

ar1.cpp: In function ?SEXPREC* ar1(SEXPREC*, SEXPREC*)?:
ar1.cpp:8:11: error: ?_? was not declared in this scope
make: *** [ar1.o] Error 1
ERROR: compilation failed for package ?mypackage?

### Code:

#include "Rcpp.h"

RcppExport SEXP ar1(SEXP xbe, SEXP g){
     Rcpp::NumericMatrix xbem(xbe);
     int nrows = xbem.nrow();
     Rcpp::NumericVector gv(g);
     for (int i = 1; i < nrows; i++) {
	  xbem(i,_) = xbem(i-1,_) * gv[0] + xbem(i,_);
     }
     return xbem;
}
#
Hi Vincent,
On 29 May 2011 at 14:45, Vincent Arel wrote:
| Hi all,
| 
| Apologies for the newbie question, but I am trying to build my first R

No apologies needed -- we do appreciate that you ask here.

| package with a Rcpp function, and I am running into some issues with
| Sugar expressions not compiling. I tried to model my package on one of
| the RcppExamples, and put the code pasted below in the file
| /src/ar1.cpp. There's also an R function in /R/ar1.R with a simple
| .Call to the c++ function. I build the package, but when I try to
| install it from source using 'R CMD INSTALL mypackage.tar.gz', I get
| the error pasted below. But the example works fine with the inline
| package.

There is a not-so-obvious side-effect of inline's cxxfunction: it adds

      using namespace Rcpp;

making all Rcpp symbols public. That is how '_' works with it.
 
| I am running R 2.12 on Ubuntu 11.04.
| 
| Thanks for your time!
| 
| Vincent
| 
| ### Error:
| 
| ar1.cpp: In function ?SEXPREC* ar1(SEXPREC*, SEXPREC*)?:
| ar1.cpp:8:11: error: ?_? was not declared in this scope
| make: *** [ar1.o] Error 1
| ERROR: compilation failed for package ?mypackage?

You need to either be explicit:

    xbem(i,Rcpp::_) = xbem(i-1,Rcpp::_) * gv[0] + xbem(i,Rcpp::_);

or add the 'using namespace Rcpp', or maybe compromise and just add

    using namespace Rcpp::_;

which makes '_' visible but requires you to explicitlu reference the rest as
you do below.

Hope this helps,  Dirk

| 
| ### Code:
| 
| #include "Rcpp.h"
| 
| RcppExport SEXP ar1(SEXP xbe, SEXP g){
|      Rcpp::NumericMatrix xbem(xbe);
|      int nrows = xbem.nrow();
|      Rcpp::NumericVector gv(g);
|      for (int i = 1; i < nrows; i++) {
| 	  xbem(i,_) = xbem(i-1,_) * gv[0] + xbem(i,_);
|      }
|      return xbem;
| }
| _______________________________________________
| 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