编译错误:未在此范围内声明'__result'

时间:2014-02-11 12:27:07

标签: r rcpp

我有一个cpp文件,我试图用RStudio的sourceCpp()编译。它包括Rcpp.h,所有必需的STL内容和“using namespace Rcpp;”。

然后它有几个函数声明(不导出到R),应该导出到R的函数,最后是声明函数的定义。

这是我尝试编译时得到的结果:

g++ -m32 -I"C:/PROGRA~1/R/R-30~1.2/include" -DNDEBUG     -I"C:/Users/Michelle/Documents/R/win-library/3.0/Rcpp/include"  -I"d:/RCompile/CRANpkg/extralibs64/local/include"     -O2 -Wall  -mtune=core2 -c RW_FastSwap.cpp -o RW_FastSwap.o

RW_FastSwap.cpp: In function 'SEXPREC* sourceCpp_27691_fastswap(SEXP, SEXP, SEXP, SEXP, SEXP)':

RW_FastSwap.cpp:459:9: error: '__result' was not declared in this scope

make: *** [RW_FastSwap.o] Error 1


Error in Rcpp::sourceCpp("C:/Users/Michelle/Desktop/Google Drive/FastSwap/RW_FastSwap.cpp") : 
  Error 1 occurred building shared library.

该行号比cpp文件的最后一行多15行,即cpp文件的最后一行是444.我确保从导出的函数返回的结果类型与返回类型匹配功能。

非常感谢任何有关解决这个问题的指导。

1 个答案:

答案 0 :(得分:2)

我们可能需要查看代码或模拟版本。

当您使用compileAttributes()函数编译Rcpp函数时 - 无论是通过按下RStudio中的按钮,还是显式 - 它会在您的代码示例周围创建附加代码(主要处理数据转换等) )。

我认为当我做一些愚蠢的事情时,我可能已经看到了这个错误,就像没有包含正确的退货声明一样。

根据Ian的评论进行编辑:这对我有用(这里有手动换行符)

R> cppFunction("IntegerVector fastswap(const NumericMatrix x, const int p, \
                    const IntegerVector S_init, const IntegerVector fixed_in, \
                    const IntegerMatrix order) { return S_init; }")
R> str(fastswap)
function (x, p, S_init, fixed_in, order)  
R> 

因此,您的计算机设置可能有问题。但由于这里几乎没有可重复的,所以没有人可以肯定地说。