【问题标题】:Enum in C++: how to pass as parameter?C++ 中的枚举:如何作为参数传递?
【发布时间】:2011-07-18 10:36:18
【问题描述】:

我的类定义中有以下枚举:

static class Myclass {
     ...
  public:    
     enum encoding { BINARY, ASCII, ALNUM, NUM };
     Myclass(Myclass::encoding);
     ...
}

然后在方法定义中:

Myclass::Myclass(Myclass::encoding enc) {
    ...
}

这不起作用,但我做错了什么?如何正确传递枚举成员,该成员在类中为成员方法(以及其他方法)定义?

【问题讨论】:

标签: c++ class enums


【解决方案1】:

我不完全确定您为什么在这里使用“静态类”。这个样板在 VS2010 中对我来说很好用:

class CFoo
{
public:
    enum Bar { baz, morp, bleep };
    CFoo(Bar);
};

CFoo::CFoo(Bar barIn)
{
    barIn;
}

【讨论】:

    【解决方案2】:

    这段代码很好:

    /* static */ class Myclass
    {
      public:    
         enum encoding { BINARY, ASCII, ALNUM, NUM };
         Myclass(Myclass::encoding); // or: MyClass( encoding );
         encoding getEncoding() const;
    }; // semicolon
    
    Myclass::Myclass(Myclass::encoding enc)
    {    // or:     (enum Myclass::encoding enc), they're the same
         // or:     (encoding enc), with or without the enum
    }
    
    enum Myclass::encoding Myclass::getEncoding() const
    //or Myclass::encoding, but Myclass:: is required
    {
    }
    
    int main()
    {
        Myclass c(Myclass::BINARY);
        Myclass::encoding e = c.getEncoding();
    }
    

    使用您遇到的真实代码和错误更新您的问题,以便我们可以解决真实问题而不是假问题。 (给我们一个*可编译*的示例,它可以重现您的问题。)

    【讨论】:

    • +1 由于您将其标记为 CW,因此我已使用其他选项对其进行了更新(不需要完全限定 enum 类型,因为函数声明/定义的范围是类的范围.
    【解决方案3】:
    class Myclass {
         ...
    public:    
         enum encoding { BINARY, ASCII, ALNUM, NUM };
         Myclass(enum Myclass::encoding);
         ...
    }
    
    Myclass::Myclass(enum Myclass::encoding enc) {
         ...
    }
    

    只是忘记了参数中的枚举关键字。

    【讨论】:

    • 为什么投反对票?这段代码是可靠的。代码在 GCC 4.5.0 和 msvc8/9 中运行良好
    • @JT:我没有投反对票。我的理解是这应该被打破,因为详细的类型说明符(我认为)对enum 无效,但也许不是。无论哪种方式,这都不能解决他的问题,因为假设它是有效的,它就相当于他自己的代码:不需要它。
    • @GMan,如果您详细说明为什么不需要或有效,可以吗,我多年来一直在编写 J T 之类的代码......(似乎没有问题)
    • @madmik3 @Tom:我已经表明我的立场是无效的暂定;进一步看,我误解了标准中的某些内容,所以我拒绝了我认为它无效的说法。 有效。也就是说,所有这一切都会详细说明Myclass:encodingname;这与它的类型或价值无关。所以它只是等同于提问者已经发布的内容(只是详细说明),因此没有解决任何问题。
    • 另外,这使得这个答案在技术上是错误的,因为你声称它是 forgotten 因此需要。再次,它不是。也就是说,除非它们造成伤害,否则我不会拒绝投票,真幸运。
    【解决方案4】:

    删除static。通常,提及确切的错误会帮助您获得更好的答案。

    【讨论】:

      【解决方案5】:

      看这个:

      C++ pass enum as parameter

      根据范围,您引用它的方式不同。在你自己的课上你说

      Myclass(encoding e);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-10
        相关资源
        最近更新 更多