使用struct enum作为参数的c ++将无法编译

时间:2013-08-02 11:06:03

标签: c++ constructor struct enums

如果在结构中创建枚举以提高可读性,请参阅此处 How to avoid name conflicts for two enum values with the same name in C++?

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

将结构作为类中构造函数的参数,我不能从控制台应用程序的main.cpp中调用它。 它给我错误**没有匹配函数调用toBarEnc :: 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);

如果我将其更改为enum代码编译

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

但是当它是一个结构时,它不会编译。我是C ++的新手,使用GCC 4.6在Linux上编译,使用99标准。

我有理由不能将结构用作参数吗?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

将构造函数声明为

BarEnc(BarEnc::Scheme scheme);

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


在这种情况下,只是为了定义枚举而没有单独的结构,你可以直接在周围的类中声明它:

class BarEnc {
public:
    enum eScheme {
        ADJ1M2,
        ADJ3M6
    };

    BarEnc(eShceme scheme);
};

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

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

答案 2 :(得分:0)

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

且const值BarEnc::Scheme::ADJ3M6的类型为BarEnc::Scheme::eScheme,它无法自动转换为结构。