c++ - 没有在C++枚举上命名的类型

标签 c++ templates enums compilation

我正在声明“关系”类,该类需要初始化“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/

相关文章:

objective-c - 枚举值 : NSInteger or int?

c++ - 定义的改变

c++ - 无法从模板类内的模板函数类调​​用类函数

wpf - 连续填充的 ListView 未虚拟化

php - Opencart:从另一个 Controller 调用方法

java - 枚举作为接口(interface)中的通用参数。在默认实现中使用

java - 在某些特定情况下更喜欢编译时常量而不是枚举

C++ libpng 转换为 GLFWimage 转换为 GLFWcursor 导致失真和间歇性行为

c++ - 在 C++ 中删除指针

c++ - 如何在ubuntu中安装SFML?