我正在尝试向包含C++代码的CRAN提交一个包(我对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) );
Run Code Online (Sandbox Code Playgroud)
我猜R(CRAN)期待别的东西而不是std :: cout ...但是什么?
您的C++项目可能正在使用标准输入和输出.
正如Writing R Extensions手册中所讨论的那样,你最终会混合两个输出系统:R和C++.
所以你被"鼓励"取代所有用途,比方说,
std::cout << "The value of foo is " << foo << std::endl;
Run Code Online (Sandbox Code Playgroud)
喜欢的东西
Rprintf("The value of foo is %f\n", foo);
Run Code Online (Sandbox Code Playgroud)
这样你的输出就可以和R一起正确混合.在我的一个(非Rcpp)软件包中,我不得不为此进行大量繁琐的修补...
现在,正如@vasicbre的评论和@Dason的回答中所提到的,如果你使用Rcpp,你可以简单地做
Rcpp::Rcout << "The value of foo is " << foo << std::endl;
Run Code Online (Sandbox Code Playgroud)
如果你已经使用Rcpp这很容易,否则你需要决定是否值得添加Rcpp ......
编辑:修复拼写错误Rcpp::Rcout.