2017-02-14 92 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; 
}