在我的课上,我定义了一个这样的枚举:
class myClass
{
public:
enum access {
forL,
forM,
forA
};
typedef access AccessType;
AccessType aType;
};
Run Code Online (Sandbox Code Playgroud)
后来定义了这样一个对象:
myClass ob;
ob->aType = 0;
Run Code Online (Sandbox Code Playgroud)
但是我收到此错误:
error: invalid conversion from 'int' to 'myClass::AccessType {aka myClass::access}' [-fpermissive]
不要将字段映射到整数?
ybu*_*ill 20
不,它们存储为整数但它们是不同的类型(例如,您甚至可以基于枚举类型重载).您必须明确转换:
myClass ob;
ob->aType = (myClass::AccessType)0;
Run Code Online (Sandbox Code Playgroud)
或者更好地编写枚举的相应命名值:
myClass ob;
ob->aType = myClass::forL;
Run Code Online (Sandbox Code Playgroud)
或者,如果您想将枚举用作一组整数常量,请更改字段的类型:
class myClass
{
public:
enum {
forL,
forM,
forA
};
int aType; // just stores numbers
};
Run Code Online (Sandbox Code Playgroud)
从枚举到int的转换是隐含的.
枚举成员由整数值支持,但没有从整数到枚举类型的隐式转换.如果你真的想像这样编写它,你需要使用显式转换:
ob->aType = static_cast<myClass::access>(0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37347 次 |
| 最近记录: |