【问题标题】:Compile error: '__result' was not declared in this scope编译错误:“__result”未在此范围内声明
【发布时间】:2014-04-29 20:38:41
【问题描述】:

我有一个 cpp 文件,我正在尝试使用 RStudio 中的 sourceCpp() 进行编译。它包括 Rcpp.h、所有必要的 STL 内容和“使用命名空间 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。我确保从导出函数返回的结果类型与返回类型匹配的功能。

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

【问题讨论】:

  • 文件保存了吗?如果您删除 .o 文件并重试,会发生什么情况?
  • 如何删除那个 .o 文件?
  • 什么版本的 Rcpp?生成的实际源文件是什么——你能发布sourceCpp(..., verbose=TRUE)的输出吗?

标签: r rcpp


【解决方案1】:

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

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

我认为当我做了一些愚蠢的事情(比如不包括正确的 return 语句)时,我可能已经看到了这个错误。

根据 Ian 的评论进行编辑: 这对我有用(此处为 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> 

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

【讨论】:

  • 如果我注释掉函数体并将其变成这样: IntegerVector fastswap(const NumericMatrix x, const int p, const IntegerVector S_init, const IntegerVector fixed_in, const IntegerMatrix order) { return S_init; } - 我仍然得到同样的错误。
  • S_init 中有下划线,只是由于某种原因没有在评论中显示。
  • 你明白我只是展示了你的代码是在我的电脑上编译的吗?因此它不是你的代码。
  • 感谢 Dirk 和 Jens。我将函数一个一个地复制到一个新的 cpp 文件中,在每个副本之后进行编译,以尝试找出错误出现的位置。最后,尽管函数的顺序略有不同,但一切都顺利编译。想不出为什么订单会成为问题,但它奏效了。再次感谢。
  • 天哪,不。 StackOverflow 问题旨在包含可重现的代码。
猜你喜欢
  • 1970-01-01
  • 2013-03-05
  • 2011-10-08
  • 2011-01-31
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
相关资源
最近更新 更多