[英]no type named on C++ enumeration
我有一個“關系”class 的聲明,它需要初始化“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
是在您的應用程序某處定義的類型。
=== 編輯 ===
來自評論:
“單詞”是這樣定義的:
class word; class word_related: public named_node { public: relation<word*> includes(relation_label::INCLUDES); };
relation<word*> includes(relation_label::INCLUDES)
是什么意思? 它看起來像是一個成員 function includes()
的定義,但隨后的relation_label::INCLUDES
必須是一個類型。 顯然不是。
也許你的意思是
relation<word*> includes(relation_label lbl = relation_label::INCLUDES);
?
當您嘗試在產生編譯錯誤的行中創建關系 object 的新實例時,請嘗試使用括號初始化
relation<word*> includes{relation_label::INCLUDES};
反而。 編譯之前的代碼時
class word_related : public named_node {
public: relation<word*> includes(relation_label::INCLUDES);
};
編譯器認為您將要聲明一個名為includes
class named_node 的成員named_node
(因此它需要函數參數的類型而不是“值”),而不是定義默認初始化的成員變量。
這個答案是對 rustyx 答案的補充,他解決了 const 成員變量缺少初始化的最重要的一點。
可以在此處找到代碼,並應用了 rustyx 答案中的修復程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.