Ste*_*ore -2 r package armadillo rcpp
我将我的包提交到CRAN存储库.该包被接受没有错误,但在检查CRAN维护者的第二步报告了以下错误.
不幸的是,我不明白我是如何解决它的.
In file included from /Builds/CRAN-QA-Simon/packages/mavericks-x86_64/Rlib/3.3/RcppArmadillo/include/armadillo:23:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/fstream:864:20: error:
no member named 'Rf_error' in 'std::__1::codecvt_base'; did you mean simply 'Rf_error'?
if (__r == codecvt_base::error)
^~~~~~~~~~~~~~
/Library/Frameworks/R.framework/Resources/include/R_ext/Error.h:35:12: note:
'Rf_error' declared here
void NORET Rf_error(const char *, ...);
^
Run Code Online (Sandbox Code Playgroud)
在我的C++文件中,我写道:
#include <math.h>
#include "ANN/ANN.h"
#include "NN.h"
#include <R.h>
#include "RcppArmadillo.h"
#include <map>
#include <vector>
#include <iostream>
Run Code Online (Sandbox Code Playgroud)
我该怎么纠正这个?是否包含Rpp.h?
R本身是用C语言编写的,因为它早在20世纪90年代初就开始了.C没有名称空间 - 由于缺少名称空间分隔,这可能导致冲突.来自共享相同名称的不同库的标识符可能是错误的.这发生在这里.
R在其C API中使用函数length(),error()......等,考虑到名称的常见性,它们可能会发生冲突.因此R具有作为Rf_其符号前置的机制:error变为Rf_error.这使用预处理器,这是相当愚蠢的(与使用编译器本身相反).因此当R看到error它想要它时Rf_error.
这里发生的事情是你很可能已经#include <RcppArmadillo.h>(因此隐含#include <Rcpp.h> 在你的实际库的包含之前.反过来尝试它.这样R的混乱它error()不会干扰你在这里让你感到困惑的库.
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |