名称空间“ std”中的“功能”未命名模板类型

安东尼·豪瑟

使用Rcpp软件包在R中包含C ++,我尝试编译C ++文件。这是出现的错误:

名称空间“ std”中的“功能”未命名模板类型

经过调查,我被告知我的代码使用的某些功能只能从C ++ 11获得。因此,我需要在Makevars文件中添加一行。但是,我发现一个小插图说Makevars不再是必需的:Rcpp vignette我该如何解决这个问题?

这是C ++脚本无效的部分:

std::function<void(const state_type, state_type, const double)> eqsir2(const Rcpp::NumericVector theta) {
  return [&theta](const state_type &x, state_type &dxdt, const double t) {
    boost_array_to_nvec2(x, nvec);
    my_fun22(nvec,t,theta);
    nvec_to_boost_array2(nvec, dxdt);
  }
拉尔夫·斯塔伯纳

为了能够std::function在C ++中使用,您必须通过添加正确的标头

#include <functional>

在代码库中的某个位置。

至于R端,您必须告诉编译器您想使用C ++ 11功能。如果您只有通过包含的.cpp文件,Rcpp::sourceCpp则必须添加

// [[Rcpp::plugins(cpp11)]]

到您的.cpp文件。

如果你正在写A R包(你所引用的小插曲是用于那些),那么src/Makevars文件不再强制要求使用Rcpp,但使用CXX_STDsrc/Makevars是请求C ++ 11 wrting包时所建议的方式。或者,您可以SystemRequirements中使用DESCRIPTION编写R扩展为例

为了在包中使用C ++ 11代码,包的Makevars文件(或Windows上的Makevars.win)应包含以下行:

CXX_STD = CXX11

然后将使用C ++ 11编译器进行编译和链接。

没有src / Makevars或src / Makefile文件的软件包可以通过在Description文件的“ SystemRequirements”字段中包含“ C ++ 11”来指定它们要求src目录中的C ++ 11代码。

系统要求:C ++ 11

如果软件包确实具有src / Makevars [.win]文件,则最好设置make变量'CXX_STD',因为它允许R CMD SHLIB在软件包的src目录中正常工作。

另外,您必须确保返回的函数和lambda的签名相同(请参见例如此处)。就目前而言,您仅对其中之一使用引用。两者都有可能,您只需要保持一致即可:

#include <Rcpp.h>
// [[Rcpp::plugins(cpp11)]]
#include <functional>

// [[Rcpp::depends(BH)]]
#include <boost/array.hpp>
typedef boost::array<double, 3> state_type;

// references
std::function<void(const state_type&, state_type&, const double)> eqsir2(const Rcpp::NumericVector theta) {
  return [&theta](const state_type &x, state_type &dxdt, const double t) {return;};
}

// no references
std::function<void(const state_type, state_type, const double)> eqsir(const Rcpp::NumericVector theta) {
  return [&theta](const state_type x, state_type dxdt, const double t) {return;};
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

名称空间“ std”中的“数组”未命名模板类型

编译错误:“名称空间“ std”中的“功能”未命名模板类型”

修复第三方代码:“错误:名称空间“ std”中的“ enable_if”未命名模板类型”

名称空间“ Eigen”中的“ EigenvalueType”未命名类型

错误:名称空间“ pqxx”中的“行”未命名类型

名称空间“ std”中的“ atomic_uint32_t”未命名类型错误

收到错误消息:名称空间“ std”中的“ shared_ptr”未命名类型

错误:命名空间“std”中的“thread”未命名类型

未命名名称空间优于静态名称空间?

为什么要将类型放在未命名的名称空间中?

命名空间“ std”中的错误“ underlying_type_t”未在project-OSRM中的example.cpp中命名模板类型

包名称的命名空间

朋友,模板,名称空间

当我使用“使用cout = std :: cout;”时,为什么会出现错误“名称空间'std'中的'cout'未命名类型”?

未命名名称空间中名称的外部链接

模型名称和命名空间

模板typedef不是类或名称空间名称

模板类继承名称空间的名称查找

匿名名称空间和命名名称空间之间的函数重载

找不到类型或命名空间名称“ASP”

Xamarin - 找不到类型或命名空间名称

找不到类型或命名空间名称“SpecialEffects”

找不到类型或命名空间名称“JsonSchema”

找不到类型或命名空间名称“GCCheckbox”

找不到类型或命名空间名称“Twilio”

找不到类型或命名空间名称“描述”

找不到类型或命名空间名称“ZXing”

找不到类型或命名空间名称“IJSRuntime”

找不到类型或命名空间名称“场景”