我是Rcpp的初学者。 我可以问一个非常基本的问题吗?以下是简单的代码:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int test(char d) {
char c;
c=d;
return 0;
}
但是当我尝试编译它时,我总是得到如下错误:
/usr/local/genomics/programs/R-3.0.0/library/Rcpp/include/Rcpp/as.h: In function ‘T Rcpp::internal::as_string(SEXPREC*, Rcpp::traits::false_type) [with T = char]’:
/usr/local/genomics/programs/R-3.0.0/library/Rcpp/include/Rcpp/as.h:66: instantiated from ‘T Rcpp::internal::as(SEXPREC*, Rcpp::traits::r_type_string_tag) [with T = char]’
/usr/local/genomics/programs/R-3.0.0/library/Rcpp/include/Rcpp/as.h:126: instantiated from ‘T Rcpp::as(SEXPREC*) [with T = char]’
test1.cpp:18: instantiated from here
/usr/local/genomics/programs/R-3.0.0/library/Rcpp/include/Rcpp/as.h:62: error: invalid conversion from ‘const char*’ to ‘char’
make: *** [test1.o] Error 1
g++ -I/usr/local/genomics/programs/R-3.0.0/include -DNDEBUG -I/usr/local/include -I"/usr/local/genomics/programs/R-3.0.0/library/Rcpp/include" -fpic -g -O2 -c test1.cpp -o test1.o
sourceCpp(“test1.cpp”)中的错误: 构建共享库时出现错误1。
你能告诉我发生了什么吗?非常感谢你!
答案 0 :(得分:1)
在某种程度上,这是一个我们可以支持单个char
对象的错误。
另一方面,它没关系,因为你可以用一个char来做很少的有用的东西。如果您使用int
而不是
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int mytest(int d) {
int c;
c=d;
return 0;
}
或者更好的是,使用string
类型:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int mytest(std::string d) {
std::string c;
c=d;
return 0;
}
当你使用Rcpp自己的类型CharacterVector
时,它确实有效。
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int mytest(CharacterVector d) {
CharacterVector c;
c=d;
return 0;
}
单个char
变量在C和C ++中有点奇怪(你需要它们的数组或指针)来表达“单词”。所以没有真正的用途来解决这个问题,因为无论如何R只有矢量类型。