尝试构建点向量时Cgal :: Dynamic_dimension_tag错误

时间:2017-02-14 02:10:09

标签: c++ iterator cgal

我正在尝试使用迭代器构建CGAL::points_d的向量。我一直收到一条我不明白的错误信息。错误似乎与我尝试将两个向量迭代器传递给CGAL::Points_d对象的方式有关。我认为它可能围绕指出点的维度的问题,我使用Dynamic_Dimension_Tag,但我不能弄清楚。信息如下。

error: no matching function for call to ‘std::vector<CGAL::Wrap::Point_d<CGAL::Epick_d<CGAL::Dynamic_dimension_tag> > >::vector(std::vector<int>::size_type, std::vector<std::vector<int> >::iterator, __gnu_cxx::__normal_iterator<std::vector<int>*, std::vector<std::vector<int> > >)’ Vector_of_points points(u.size(), w.begin(), next(w.begin()));

这是我正在使用的一些玩具代码。

#include <iostream>
#include <CGAL/Kernel_d/Point_d.h>
#include <CGAL/Epick_d.h>
#include <iostream>
#include <vector>


typedef CGAL::Epick_d< CGAL::Dynamic_dimension_tag > Kernel;
typedef Kernel::Point_d Point;
typedef std::vector<Point> Vector_of_points;
typedef std::vector<int> dbvec ;

int main() {

    dbvec v ;
    dbvec u ;
    std::vector<std::vector<int>> w;

    int size_v = 20;

    for(int i=0; i < size_v; ++i){
        v.push_back(i);
    }

    for(int i=size_v; i-- >0; ){
        u.push_back(i);

    }

    w.push_back(u);
    w.push_back(v);
    w.push_back(u);

    Vector_of_points points;

    for(int i=0; i < size_v; ++i) {
        points.push_back(Point(size_v, w[i].begin(), next(w[i].begin())));
    }

 std::cout << points.size() << std::endl;
    return 0;
}

1 个答案:

答案 0 :(得分:0)

我想出了这个问题。它与我在Point()构造函数中设置的迭代器参数的方式有关。这是更新的代码。希望这有助于任何想要填写CGAL积分的人。

#include <iostream>
#include <CGAL/Kernel_d/Point_d.h>
#include <CGAL/Epick_d.h>
#include <iostream>
#include <vector>



typedef CGAL::Epick_d< CGAL::Dynamic_dimension_tag > Kernel;
typedef Kernel::Point_d Point;
typedef std::vector<Point> Vector_of_points;
typedef std::vector<int> dbvec ;

int main() {

    dbvec v ;
    dbvec u ;
    std::vector<std::vector<int>> w;

    int size_v = 20;

    for(int i=0; i < size_v; ++i){
        v.push_back(i);
    }

    for(int i=size_v; i-- >0; ){
        u.push_back(i);

    }

    w.push_back(u);
    w.push_back(v);
    w.push_back(u);

    Vector_of_points points;

    for(int i = 0; i < w.size(); ++i ) {
        points.push_back(Point(size_v, w[i].begin(), w[i].end()));
    }
    std::cout << points.size() << std::endl;
    std::cout << points[1].dimension() << std::endl;
    std::cout << points[1][1] << std::endl;

    return 0;
}