使用结构枚举作为参数的 C++ 无法编译
c++ using struct enum as a parameter won't compile
如果为了可读性在结构中创建枚举,请在此处提及如何避免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
,则无法自动转换为结构。