在rcpp中编译错误

时间:2017-01-17 06:55:47

标签: c++ rcpp

当我在Rcpp中编译下面的代码时,我在名为stl_algobase.h的文件中收到以下错误:

`no type named 'value_type' in 'struct std::iterator_traits<Rcpp::Vector<14, Rcpp::PreserveStorage> >'`

我使用标准类型声明,因此我不清楚值类型的错误位置。

以下是代码:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::plugins(cpp11)]]
#include <cstddef>   // std:size_t
#include <iterator>  // std:begin, std::end
#include <vector>    // std::vector
#include <iostream>
#include <string>

// [[Rcpp::export]]
    bool dupCheckRcpp (const Rcpp::NumericVector vec, const Rcpp::NumericMatrix allMatrix) {
    int i, nrow, ncol;
    bool flag;
    nrow = allMatrix.nrow(); ncol = allMatrix.ncol();
    Rcpp::NumericVector vecTmp(ncol);

    flag = false;
    for (i = 0; i < nrow; ++i) {
      // copy to vector
      vecTmp = allMatrix[i];
      // compare
        if (std::equal(vec.begin(),vec.end(),vecTmp)) {
          flag = true;
          return flag;
          }
    }
    return flag; 
  }

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

当你调用std::equal时,你需要传递迭代器,而不是整个容器。 http://en.cppreference.com/w/cpp/algorithm/equal

变化

if (std::equal(vec.begin(),vec.end(),vecTmp)) {

if (std::equal(vec.begin(),vec.end(),vecTmp.begin())) {