Rcpp编译错误:无法将List转换为SEXP

时间:2016-07-06 20:14:57

标签: r rcpp

如果我调整一些有效的Rcpp代码将它放入一个类中,它就会停止工作。

以下是基于非类的工作代码:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
List test1_() {
  Rcpp::NumericVector x = Rcpp::NumericVector::create(1.0);
  return Rcpp::List::create(Rcpp::Named("x") = x);
}

但是当我将它分成.cpp时......

// testlist.cpp
#include <Rcpp.h>
#include "testlist.h"
using namespace Rcpp;

// [[Rcpp::export]]
SEXP test2_() {
  testlist a_testlist;
  return a_testlist.test;
}

......和.h ...

// testlist.h
#ifndef TESTLIST_
#define TESTLIST_

#include <Rcpp.h>

class testlist {

public:

  testlist() {}

  Rcpp::List test() {
    Rcpp::NumericVector x = Rcpp::NumericVector::create(1.0);
    return Rcpp::List::create(Rcpp::Named("x") = x);
  }

};

#endif

...然后我收到以下编译错误。

g++ -I/usr/include/R/ -DNDEBUG  -D_FORTIFY_SOURCE=2 -I"/home/nacnudus/R/x86_64-pc-linux-gnu-library/3.3/Rcpp/include"   -fpic  -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong  -c RcppExports.cpp -o RcppExports.o
g++ -I/usr/include/R/ -DNDEBUG  -D_FORTIFY_SOURCE=2 -I"/home/nacnudus/R/x86_64-pc-linux-gnu-library/3.3/Rcpp/include"   -fpic  -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong  -c testlist.cpp -o testlist.o
testlist.cpp: In function ‘Rcpp::List test2_()’:
testlist.cpp:8:21: error: cannot convert ‘testlist::test’ from type ‘Rcpp::List (testlist::)() {aka Rcpp::Vector<19> (testlist::)()}’ to type ‘Rcpp::List {aka Rcpp::Vector<19>}’
   return a_testlist.test;
                     ^~~~
make: *** [/usr/lib64/R/etc/Makeconf:141: testlist.o] Error 1
ERROR: compilation failed for package ‘testlist’
* removing ‘/tmp/RtmppNxPq5/devtools_install_f654fb60a32/testlist’

我做错了什么?

1 个答案:

答案 0 :(得分:2)

简单的拼写错误:

return a_testlist.test;

需要:

return a_testlist.test();

但是,您应该考虑阅读Rcpp-modules小插图以正确公开课程。