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

Posted

技术标签:

【中文标题】enum 不是非静态数据成员或类的基类【英文标题】:enum is not a non-static data member or base class of class 【发布时间】:2018-04-19 09:52:18 【问题描述】:

嘿,我正在尝试编写 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 的非静态数据成员或基类。 我尽可能多地用谷歌搜索,但没有找到类似的东西。

【问题讨论】:

color是类型名,需要声明该类型的成员字段, 【参考方案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);

【讨论】:

【参考方案2】:

在上面的代码 sn-p 中,您声明的是类型,而不是 Vertice 的成员。见下面的代码sn-p。

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;
;

【讨论】:

以上是关于enum 不是非静态数据成员或类的基类的主要内容,如果未能解决你的问题,请参考以下文章

5.7 内部类

4月14日继承与多态

具有静态(内联)方法的从未实例化类的基类

DLL-导出模板基类的静态成员

枚举(enum)与类的静态成员(static)

mfc 时钟 OnTimer 非静态成员函数的非法调用