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 不是非静态数据成员或类的基类的主要内容,如果未能解决你的问题,请参考以下文章