枚举不是非静态数据成员或类的基类

时间:2018-04-19 09:52:19

标签: c++ oop breadth-first-search non-static

嘿,我正在尝试编写BFS算法。我的图表类看起来像这样。

class Graph {
    struct Vertice{
        int ID;
        int distance;
        enum color{ WHITE, GREY, BLACK };
        Vertice* parent;
        Vertice(int n) :ID(n), distance(0), color(WHITE), parent(0){};
    };

public:
    Graph(int n) : adjList(n) {

    }

    void add_edge(int u, int v) {
        adjList[u - 1].insert(adjList[u].begin(),Vertice(v));
        adjList[v - 1].insert(adjList[v - 1].begin(), Vertice(u));
    }

    vector<int> shortest_reach(int start) {

    }

    vector<list<Vertice>> adjList;
};

在struct Vertice的构造函数的初始化列表中,我收到以下错误 color不是Graph :: Vertice类的非静态数据成员或基类。 我尽可能多地用Google搜索,但没有发现任何类似的内容。

2 个答案:

答案 0 :(得分:1)

enum color{ WHITE, GREY, BLACK };

这只会定义值,而不是在每个Vertice内实现其中一个值。

添加另一行也使用值:

enum class Color{ WHITE, GREY, BLACK };
Color color;
Vertice* parent;
Vertice(int n) :ID(n), distance(0), color(Color::WHITE), parent(0){};

答案 1 :(得分:0)

在上面的代码段中,您声明了类型,而不是Vertice的成员。请参阅下面的代码段。

class Graph {

    typedef enum color_t{ WHITE, GREY, BLACK } color_t; // Declare the enum type here.

    struct Vertice{
        int ID;
        int distance;
        color_t color; // the member.

        Vertice* parent;
        Vertice(int n) :ID(n), distance(0), color(WHITE), parent(0){};
    };

public:
    Graph(int n) : adjList(n) {

    }

    void add_edge(int u, int v) {
        adjList[u - 1].insert(adjList[u].begin(),Vertice(v));
        adjList[v - 1].insert(adjList[v - 1].begin(), Vertice(u));
    }

    vector<int> shortest_reach(int start) {

    }

    vector<list<Vertice>> adjList;
};