Circular dependency in C++ classes

后端 未结 2 2002
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-11 08:42

I am relatively new to C++, and facing a circular dependency problem. Can someone please help me solve this?

I have two classes:

class Vertex {
    s         


        
2条回答
  •  天涯浪人
    2020-12-11 09:31

    All you need is to forward-declare the Edge class before it's used within the Vertex:

    class Edge;
    
    class Vertex {
        string name;
        int distance;
        ...
    };
    
    class Edge { ... };
    

    You can't put members of type Vertex instead of the declaration of Vertex itself, since C++ doesn't allow recursive types. Within the semantics of C++, the size of such type would need to be infinite.

    You can, of course, put pointers to Vertex within Vertex.

    What you want, in fact, within Vertex's edge and adjacency lists, is pointers, not copies of objects. Thus, your code should be fixed like below (assuming you use C++11, which you in fact should be using now):

    class Edge;
    
    class Vertex {
        string name;
        int distance;
        int weight;
        bool known;
        list> edgeList;
        list> adjVertexList;
    
    public:
        Vertex();
        Vertex(const string & nm);
        virtual ~Vertex();
    };
    
    class Edge {
        Vertex target;
        int weight;
    
    public:
        Edge();
        Edge(const Vertex & v, int w);
        virtual ~Edge();
    
        Vertex getTarget();
        void setTarget(const Vertex & target);
        int getWeight();
        void setWeight(int weight);
    };
    

提交回复
热议问题