0

до сих пор, только ссылка, которая была близка к ответу на вопрос был таков: How do I initialize a stl vector of objects who themselves have non-trivial constructors?Как на самом деле инициализировать 2d вектор объектов из класса/конструктор

Однако, я попытался сделать это, и я до сих пор смущенный.

Соответствующий код:

Край

// Edge Class 
class Edge{ 
    public: 
    // std::string is used to avoid not a name type error 
    Edge (std::string, double); 
    double get_dist(); 
    std::string get_color(); 
    ~Edge(); 
    private: 
    std::string prv_color; // prv_ tags to indicate private 
    double prv_distance; 
}; 

Edge::Edge (std::string color, double distance){ 
    prv_color = color; 
    prv_distance = distance; 
}; 

Graph

// Graph Class 

class Graph{ 
    public: 
    Graph (double, double); 
    double get_dist_range(); 
    ~Graph(); 

    private: 
    double prv_edge_density; // how many edges connected per node 
    double prv_dist_range; // start from 0 to max distance 
    std::vector < std::vector <Edge*> > nodes; // the proper set-up of 
}; 

// Graph constructor 
Graph::Graph (double density, double max_distance){ 
    prv_edge_density = density; 
    prv_dist_range = max_distance; 
    nodes (50, std::vector <Edge*> (50)); // THIS LINE STUMPS ME MOST 
}; 

Как я пытался инициализировать вектор объектов указателей, я получаю эту ошибку из следующей строки:

nodes (50, std::vector <Edge*> (50)); // Error at this line 

error: no match for call to ‘(std::vector<std::vector<Edge*, std::allocator<Edge*> >, 
    std::allocator<std::vector<Edge*, std::allocator<Edge*> > > >) 
    (int, std::vector<Edge*, std::allocator<Edge*> >)’ 

Я хотел бы посоветовать это как можно скорее.

Примечание: Предположим, что я использовал .cpp файлы и файлы .h отделить код

+0

Вопрос, на который вы ссылаетесь, имеет ответ на равнине. – chris

ответ

4

Вы должны узнать о инициализатора списках

// Graph constructor 
Graph::Graph (double density, double max_distance) : 
    nodes (50, std::vector <Edge*> (50)) 
{ 
    prv_edge_density = density; 
    prv_dist_range = max_distance; 
} 

Непроверено кода.

+5

Я предлагаю также сделать другие переменные частью списка инициализаторов. Это действительно так, как должно быть. – pmr

+0

@john Большое спасибо, кажется, что список инициализаторов считается лучшим вариантом, когда вы должны инициализировать частные поля – JBRPG

 Смежные вопросы

  • Нет связанных вопросов^_^