我正在声明“关系”类,该类需要初始化“relation_label”值。
namespace hr {
class node;
enum relation_label : uint8_t {
HAS, CONTAINS, IS_PARALLEL, INCLUDES, IS, PART_OF, LEADS_TO, IN
};
template<typename N>
class relation : public std::vector<N> {
private:
relation(const relation &) = default;
public:
const relation_label label;
relation(relation_label l) : std::vector<N>(0) {
this->label = l;
};
};
}
该代码可以编译,但是不编译关系对象的新实例。例如,以下错误:
relation<word *> includes(relation_label::INCLUDES);
是“在'hr::relation_label'中没有名为'INCLUDES'的类型”。
任何的想法?
非常感谢。
最佳答案
您看到的错误可能是由之前的另一个错误引起的,即:const
成员必须内联或使用member-init-list进行初始化。在构造函数的主体中,它们已经是const
。
更改
relation(relation_label l) : std::vector<N>(0) {
this->label = l;
};
至
relation(relation_label l) : std::vector<N>(0), label(l) {
}
另外,我希望
word
是在应用程序中某个位置定义的类型。===编辑===
从评论:
"word" is defined like this:
class word; class word_related : public named_node { public: relation<word*> includes(relation_label::INCLUDES); };
relation<word*> includes(relation_label::INCLUDES)
是什么意思?它看起来像成员函数includes()
的定义,但是relation_label::INCLUDES
必须是类型。显然不是。也许你是说
relation<word*> includes(relation_label lbl = relation_label::INCLUDES);
?
关于c++ - 没有在C++枚举上命名的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61068106/