【问题标题】:Using enum class type in switch causing errors在开关中使用枚举类类型导致错误
【发布时间】:2018-11-22 04:48:34
【问题描述】:

我希望有人可以帮助我解决我在 switch case 中使用枚举类时遇到的错误。尝试使用遍历类型来选择交换机中的路径。 这是我的代码:

enum class TraverseType { PREORDER, INORDER, POSTORDER, BREADTHORDER };
private: 
    TraverseType traverseOrder;
public:
friend ostream& operator<<(ostream& out, const BTree& tree)
{
    TraverseType type = traverseOrder;//error
    switch (type)
    {
    case TraverseType::PREORDER:
    {

        break;
    }
    case TraverseType::INORDER:
    {

        break;
    }
    case TraverseType::POSTORDER:
    {

        break;
    }
    case TraverseType::BREADTHORDER:
    {

        break;
    }
    default:
    {
        break;
    }
    }
    return out;
}`

我得到的错误是: 错误 C2440 'initializing':无法从 'unknown' 转换为 'TraverseType' 并且我已经尝试找到解决这个问题的方法已经好几个小时了。如果您需要更多代码,请告诉我。提前感谢您的帮助

【问题讨论】:

  • enum class TraverseType { PREORDER, INORDER, POSTORDER, BREADTHORDER };
  • @user4581301 这是未完成的代码。我只是想让它编译,但是我正在尝试使用开关来选择不同的方式来遍历二叉树
  • 看起来你想要enum class TraverseType { PREORDER, INORDER, POSTORDER, BREADTHORDER };class BTree { private:注意class BTree { 塞在那里。
  • @user4581301 你的意思是我应该移动“模板 ” 行,因为我试过了,它本身会导致错误。我正在寻找的答案类似于 stackoverflow.com/questions/9062082/... 中的答案,除了我需要在另一个函数中设置遍历类型,然后在 switch 中用作案例
  • 我认为发布整个代码会有所帮助 - 在coliru.stacked-crooked.com 或类似的在线 ide 上提供它会更好。

标签: c++ enums switch-statement enum-class


【解决方案1】:

您的朋友函数需要对类对象的引用才能访问其成员 - traverseOrder。

你的班级名称是什么?如果是 BTree,则使用其引用访问私有成员。

enum class TraverseType { PREORDER, INORDER, POSTORDER, BREADTHORDER };
private: 
    TraverseType traverseOrder;
public:
friend ostream& operator<<(ostream& out, const BTree& tree)
{
    TraverseType type = tree.traverseOrder;
    switch (type)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 2016-11-28
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多