R 检查不喜欢 std:cout (C++)
Posted
技术标签:
【中文标题】R 检查不喜欢 std:cout (C++)【英文标题】:R check doesn't like std:cout (C++) 【发布时间】:2015-01-17 21:49:37 【问题描述】:我正在尝试向 CRAN 提交一个包含 C++ 代码的包(我不知道 C++,cpp 文件是由其他人编写的)。
R 检查抱怨 'std::cout' (C++) 编译后的代码不应调用可能终止 R 的入口点,也不应调用 写入 stdout/stderr 而不是控制台,也不是 C RNG
我在代码中发现了以下命令:
integrate_const(stepper_type( default_error_checker< double >( abs_error , rel_error ) ),
mDifEqn,
x,
0.0,
(precipitationLength * timeStep),
timeStep,
streaming_observer(std::cout) );
我猜 R (CRAN) 期待别的东西而不是 std::cout...但是什么?
【问题讨论】:
【参考方案1】:您的 C++ 项目可能正在使用标准输入和输出。
正如编写 R 扩展手册中所讨论的那样,问题是您最终会混合 两个 输出系统:R 和 C++ 一个。
因此,您被“鼓励”替换所有用途,例如,
std::cout << "The value of foo is " << foo << std::endl;
类似的东西
Rprintf("The value of foo is %f\n", foo);
以便您的输出与 R 正确混合。在我的一个(非 Rcpp)包中,我不得不为此做很多乏味的补丁......
现在,正如@vasicbre 的评论和@Dason 的回答中所述,如果您使用 Rcpp,您可以简单地做
Rcpp::Rcout << "The value of foo is " << foo << std::endl;
如果您已经使用 Rcpp,这很容易,否则您需要确定是否值得添加 Rcpp...
编辑:修正了Rcpp::Rcout
中的错字。
【讨论】:
非常感谢,我目前不使用 Rcpp,但是......我会读一下。【参考方案2】:如果您想流式传输到 R 的缓冲输出,您需要使用 Rcpp::Rcout 而不是 std::cout。
有关更多详细信息,您可以阅读 Rcpp 的一位作者撰写的这篇文章:http://dirk.eddelbuettel.com/blog/2012/02/18/
【讨论】:
以上是关于R 检查不喜欢 std:cout (C++)的主要内容,如果未能解决你的问题,请参考以下文章
C++ 中的 StringStream/c_str() 损坏