2017-02-14 5 views
0

Je suis en train de construire un vecteur de CGAL::points_d en utilisant un itérateur. Je reçois toujours un message d'erreur que je ne comprends pas. L'erreur semble être avec la façon dont j'essaye de passer les deux itérateurs de vecteur à l'objet CGAL::Points_d. Je pense que cela pourrait être centré sur la question de l'indication de la dimension des points, pour laquelle j'ai utilisé le Dynamic_Dimension_Tag, mais je ne peux pas comprendre plus que cela. Le message est ci-dessous.Cgal :: Dynamic_dimension_tag erreur lors de la tentative de construction de vecteur de points

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()));

Voici un code de jouets que je travaillais avec.

#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

Vous avez coupé le message d'erreur trop tôt. C'était juste commencer à arriver à la bonne partie! – user4581301

+0

Oups. Désolé pour ça. Haha. Je suis allé à cela trop longtemps aujourd'hui. – krishnab

+1

Le message d'erreur est parce qu'il n'y a aucun constructeur de vecteur qui correspond à ce que vous avez. Celui [qui semble le plus proche est le numéro 2 ici] (http://en.cppreference.com/w/cpp/container/vector/vector): "construire un' vecteur' de N éléments tous mis à la valeur Y. " Ce que vous lui donnez est un compte, un itérateur d'un vecteur d'un type de données différent, et le deuxième élément de ce vecteur différent. Il semble que vous essayez de construire un «vecteur» de X à partir du contenu d'un Ys «vectoriel», mais je n'ai pas de réponse pour vous autre que de lire le lien et de choisir un meilleur constructeur. – user4581301

Répondre

0

J'ai trouvé le problème. Cela avait à voir avec la façon dont j'avais l'argument itérateur mis en place dans le constructeur Point(). Voici le code mis à jour. Espérons que cela aidera tous ceux qui veulent remplir les points 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; 
}