0

私はグラフクラスで作業しており、頂点用のクラスとエッジ用の別のクラスの構築を開始したばかりです。私の質問は一般的にグラフとは関係ありません。

最初に Vertex という名前のクラスを構築します。これまでのところ、実装に問題はありませんでした。次に、別のクラスを開始しました。その名前は Edge です。Edge には 3 つの主要メンバーがあり、そのうちの 2 つは Vertex 型で、3 番目のメンバーはunsigned int 型。

コードは次のとおりです。

#include<iostream>
using namespace std;



class Vertex
{
 private:
     unsigned int id;                                 
 public:   
    unsigned int get_id(){return id;};   
    void set_id(unsigned int value) {id = value;};
    Vertex(unsigned int init_val) {id = init_val;};   
    ~Vertex() {};                                     
};


class Edge
{
 private:
      Vertex first_vertex;                 // a vertex on one side of the edge
      Vertex second_vertex;                // a vertex on the other side of the edge
      unsigned int weight;                 // the value of the edge ( or its weight )     
 public:   
    Edge(Vertex vertex_1, Vertex vertex_2, unsigned int init_weight)  //constructor
    {
         first_vertex(vertex_1.get_id());
         second_vertex(vertex_2.get_id());
         weight = init_weight;
      }

    ~ Edge();   // destructor
}; 

///////////////////////////////// this part is to test the result

Vertex ver_list[2] = {7, 9};
Vertex test = 101;

int main()
{
    cout<< "Hello, This is a graph"<< endl;
    for (unsigned int i = 0; i < 2; i++) cout<< ver_list[i].get_id() << endl;      
    cout<< test.get_id() << endl;

return 0;
}

コンストラクタ Edge を追加する前は、コードはエラーなしで実行されていました。コンストラクタ Edge を追加した後、コードを実行しようとするとエラーが発生しました。上記の間違いを特定できません。

ご提案いただきありがとうございます。

ここに私が受け取っているエラーメッセージがあります:

hw2.cpp: In constructor 'Edge::Edge(Vertex, Vertex, unsigned int)':
hw2.cpp:31:6: error: no matching function for call to 'Vertex::Vertex()'
      {
      ^
hw2.cpp:31:6: note: candidates are:
hw2.cpp:13:2: note: Vertex::Vertex(unsigned int)
  Vertex(unsigned int init_val) {id = init_val;};   // constructor
  ^
hw2.cpp:13:2: note:   candidate expects 1 argument, 0 provided
hw2.cpp:6:7: note: Vertex::Vertex(const Vertex&)
 class Vertex
       ^
hw2.cpp:6:7: note:   candidate expects 1 argument, 0 provided
hw2.cpp:31:6: error: no matching function for call to 'Vertex::Vertex()'
      {
      ^
hw2.cpp:31:6: note: candidates are:
hw2.cpp:13:2: note: Vertex::Vertex(unsigned int)
  Vertex(unsigned int init_val) {id = init_val;};   // constructor
  ^
hw2.cpp:13:2: note:   candidate expects 1 argument, 0 provided
hw2.cpp:6:7: note: Vertex::Vertex(const Vertex&)
 class Vertex
       ^
hw2.cpp:6:7: note:   candidate expects 1 argument, 0 provided
hw2.cpp:32:41: error: no match for call to '(Vertex) (unsigned int)'
           first_vertex(vertex_1.get_id());
                                         ^
hw2.cpp:33:42: error: no match for call to '(Vertex) (unsigned int)'
           second_vertex(vertex_2.get_id());
4

4 に答える 4

3

おそらく問題は、コンストラクターの構文です。

Edge(Vertex vertex_1, Vertex vertex_2, unsigned int init_weight)  //constructor
{
         first_vertex(vertex_1.get_id());
         second_vertex(vertex_2.get_id());
         weight = init_weight;
}

初期化子リストでメンバーを初期化する必要があります。

Edge(Vertex vertex_1, Vertex vertex_2, unsigned int init_weight) : first_vertex(vertex_1.get_id()), second_vertex(vertex_2.get_id()), weight(init_weight)
{

}

また、頂点への const 参照を渡す必要があります。

Edge(const Vertex& vertex_1, const Vertex& vertex_2, unsigned int init_weight)
于 2013-10-25T17:29:55.443 に答える