2017-02-14 48 views
0

我正在尝试使用迭代器构建向量CGAL::points_d。我不断收到一条我不明白的错误消息。该错误似乎与我尝试将两个矢量迭代器传递给CGAL::Points_d对象的方式一样。我认为这可能是围绕指示点的维度问题,我使用了Dynamic_Dimension_Tag,但我无法想象这个问题。消息如下。Cgal :: 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; 
} 
+0

您已经很快删除了错误消息。它刚刚开始达到最佳状态! – user4581301

+0

糟糕。对于那个很抱歉。哈哈。今天我一直在这太久。 – krishnab

+1

错误消息是因为没有与您拥有的相匹配的向量构造函数。这个[看起来最接近的数字是2](http://en.cppreference.com/w/cpp/container/vector/vector):“构建一个N个元素的矢量,它们都被设置为Y.”你喂它的是count,来自不同数据类型的vector的'iterator',以及不同类型的'vector'中的第二个元素。看起来你正试图从vector的内容中构建一个X的vector,但除了阅读链接并选择一个更好的构造函数外,我没有任何答案。 – user4581301

回答

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; 
}