2014-02-11 76 views
0

我有一个cpp文件,我试图使用sourcecpp()从RStudio进行编译。它包含Rcpp.h,所有必需的STL内容和“使用名称空间Rcpp;”。编译错误:'__result'未在此范围内声明

然后它有几个函数声明(不输出到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我已确保从导出函数返回的结果类型与函数的返回类型相匹配。

任何有关解决此问题的指导将不胜感激。

+0

该文件是否保存?如果删除'.o'文件并再试一次,会发生什么? – doctorlove

+0

如何删除.o文件? –

+0

什么版本的Rcpp?什么是生成的实际源文件 - 你可以发布'sourceCpp(...,verbose = TRUE)'的输出吗? –

回答

2

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

当你使用compileAttributes()函数来编译一个Rcpp函数---不管是通过按下RStudio中的按钮,还是明确地---它会在代码样本周围创建额外的代码(基本上处理数据转换等)。

我想我可能已经看到了这个错误,当我做了一些愚蠢的事情,如不包括正确的返回语句。

编辑根据伊恩的评论:这(在这里与手动换行符为SO)对我的作品

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> 

所以,你可以有你的电脑设置有问题。但由于这里几乎没有任何可以肯定的说法,所以可再生

+0

如果我注释掉函数体并把它变成这样:IntegerVector快速交换(常量NumericMatrix X,const int的P, 常量IntegerVector S_init, 常量IntegerVector fixed_in, 常量IntegerMatrix顺序){ 返回S_init; } - 我仍然得到相同的错误。 –

+0

下划线在S_init中,因为某些原因,在这里没有显示注释。 –

+0

你是否明白我刚刚表明你的代码是在我的电脑上编译的?因此它不是你的代码。 –