C++, Class 重定义

C++, Class redefinition

Error 3 error C2011 : 'Queue' : 'class' type redefinition.

Error 2 error C2011 : 'Edge' : 'class' type redefinition.

为什么会出现这个错误? 我编译了程序,它崩溃了...

    #include "Edge.h"
    class Queue
    {
    private:
        Edge * Heap;
        int hpos;
    public:

        Queue(int n);
        ~Queue();
        Edge front();
        void push(Edge e);
        void pop();

    };       
    class Edge
    {
        int v1, v2, weight;               // Wierzchołki krawędzi, waga krawędzi
    };

    #include "Queue.h"

    struct TNode
    {
        TNode * next;
        int v, weight;
    };

    class MSTree
    {
    private:
        TNode ** A;                   // Tablica list sąsiedztwa
        int Alen;                     // Liczba komórek w tablicy
        int weight;                   // Waga całego drzewa
    public:
        MSTree(int n);
        ~MSTree();
        void addEdge(Edge e);
        void print();
    };

    #include "Queue.h"


    struct DSNode
    {
        int up, rank;
    };

    class DSStruct
    {
    private:
        DSNode * Z;
    public:
        DSStruct(int n);
        ~DSStruct();
        void MakeSet(int v);
        int FindSet(int v);
        void UnionSets(Edge e);
    };

您收到此错误的原因很可能是您的 header 文件多次包含在同一编译单元中。您应该按照此处 http://en.wikipedia.org/wiki/Include_guard

的说明在 header 中使用 include guards