如果在结构中创建枚举以提高可读性,请参阅此处 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标准。
我有理由不能将结构用作参数吗?
答案 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
,它无法自动转换为结构。