Rcpp:无法返回循环中创建的对象

时间:2015-02-18 12:34:35

标签: c++ rcpp

我想我错过了一些相当基本的东西,但我不知道是什么:

    #include <Rcpp.h>
    using namespace Rcpp;
    // [[Rcpp::export]]

    NumericMatrix test(NumericVector x) {

    for(int i=0; i<100; i++)
    {
              NumericMatrix n_m1(4,5);
    }
    return n_m1;
    }

这给了我错误:

第17行'n_m1'未在此范围内声明

第19行控制到达非空函数的末尾[-Wreturn-type]

第一个错误显然是胡说八道。它与循环有关,因为如果我删除它就可以正常工作。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

此变量的范围(n_m1):

for(int i=0; i<100; i++)
{
              NumericMatrix n_m1(4,5);
}

循环。所以当然在循环之外你不能使用它。 不归还。

在方法级别扩展范围定义:

NumericMatrix test(NumericVector x) {
    NumericMatrix n_m1(4,5);

    for(int i=0; i<100; i++)
    {
      // you can use it here now
    }

    return n_m1; // also here
    }

我上面定义变量的方式现在它具有函数范围 - 例如,你只能在函数内部使用它。如果您想进一步扩展范围,也许您可​​以考虑全局变量?如果感兴趣,您可以阅读有关该主题的更多信息,例如here