如何在这个C ++示例中正确使用枚举?

时间:2014-02-10 00:26:47

标签: c++ enums

我有一个这样的类,声明了一个公共枚举:

// DataStorage.h
class DataStorage
{    
  enum ActionType { ADD, REMOVE };

  public :
    data();
    void update(ActionType action, Data dataItem);
};

然后我有一个使用它的Main.cc ......

// Main.cc
#include "DataStorage.h"

int main() {
  DataStorage dataStorage;
  Data dataItem("abc123");
  dataStorage.update(ActionType.ADD, dataItem); <<-- error here
}

我的问题是当我编译时出现此错误:

Main.cc:29:18: error: ‘ActionType’ was not declared in this scope

我做错了什么?应该在哪里宣布枚举?我应该如何在主要使用它?

THX!

2 个答案:

答案 0 :(得分:4)

更新

dataStorage.update(ActionType.ADD, dataItem);  

为:

dataStorage.update(DataStorage::ADD, dataItem);  

注意:You need to make enum type ActionType public

class DataStorage
{ 
public :   
    enum ActionType { ADD, REMOVE };

    data();
    void update(ActionType action, Data dataItem);
};

答案 1 :(得分:4)

以下代码应该可行(并且通过 c ++标准完全没问题):

// DataStorage.h
class DataStorage
{    
  public :
    enum ActionType { ADD, REMOVE };

    data();
    void update(ActionType action, Data dataItem);
};

  dataStorage.update(DataStorage::ADD, dataItem);

如果您想使用ActionType标识引用枚举值,请使用新的 enum class功能(然后将解析为DataStorage::ActionType::ADD)。