使用结构枚举作为参数的 C++ 无法编译

c++ using struct enum as a parameter won't compile

本文关键字:C++ 编译 参数 结构 枚举      更新时间:2023-10-16

如果为了可读性在结构中创建枚举,请在此处提及如何避免C++中两个同名枚举值的名称冲突?

我计划添加更多枚举,在这里和其他情况下,我只是想知道为什么结构没有编译。来自C#和Java的我希望有一个更简单的语法——

并且将结构作为类中构造函数的参数,我无法从控制台应用程序的main.cpp调用它。它给了我一个错误**调用BarEnc::BarEnc(BarEnc::Scheme::eScheme)时没有匹配函数**main.cpp

这是类

class BarEnc {
public:
    struct Scheme
    {
      enum eScheme
      { ADJ1M2, ADJ3M6
      };
    };
    BarEnc();
    BarEnc(BarEnc::Scheme scheme);
}

在main.cpp中我称之为

BarEnc barEnc = BarEnc(BarEnc::Scheme::ADJ3M6);

但是,如果我在构造函数中将参数改为int,代码就会编译

BarEnc(int scheme);

如果我将其更改为枚举,代码将编译

BarEnc(BarEnc::Scheme::eScheme scheme);

但当它是一个结构时,它不会编译。我对C++比较陌生,使用GCC 4.6在Linux上编译,使用99标准。

为什么我不能使用结构作为参数?

简单的问题:您的枚举值应该如何转换为struct?

简单的回答是:没有办法,因为没有合适的构造函数。

你的结构没有成员,只有类型(enum),所以,我不知道你想做什么。

当您将构造函数声明为时

BarEnc(BarEnc::Scheme scheme);

您告诉编译器BarEnc构造函数采用结构作为参数,因此您不能传递枚举值,因为它是枚举而不是结构。


在这种情况下,实际上没有单独的结构来定义枚举,您可以直接在周围的类中声明它:

class BarEnc {
public:
    enum eScheme {
        ADJ1M2,
        ADJ3M6
    };
    BarEnc(eShceme scheme);
};

然后在创建BarEnc对象时,传递枚举值:

BarEnc barenc(BarEnc::eScheme::ADJ1M2);

可以使用结构作为参数。但您的结构体BarEnc::Scheme实际上没有成员。

并且常量值BarEnc::Scheme::ADJ3M6的类型为BarEnc::Scheme::eScheme,则无法自动转换为结构。