C ++ - 错误列表的数据结构

时间:2015-11-09 17:48:24

标签: c++ data-structures enums enumeration error-list

我有一个错误列表,如下所示:

"ERROR CODE" "POSITION" "Error description"
"000" "1" "No error"
"001" "2" "DB Connection error"
"002" "2" "Error in processing"

还有很多错误。

现在我真正需要做的是以某种方式实现这些错误(错误永远不会改变,它们总是相同的),以便使用该库的开发人员可以通过给定的ERROR_CODE轻松识别错误描述。

例如:char * getError(ERROR_CODE);并返回与ERROR_CODE关联的错误描述的字符串。

我想过使用ENUM。但我似乎无法使其正常工作。

2 个答案:

答案 0 :(得分:1)

如果错误代码是字符串,那么一种方法是使用std::map<std::string, std::string>

#include <map>
#include <string>
#include <iostream>

std::map<std::string, std::string> ErrCodeMap = 
   { {"000", "No error"}, 
     {"001", "DB Connection error"}, 
     {"002", "Error in processing"} };

std::string getError(const std::string& errCode)
{
   auto it = ErrCodeMap.find(errCode);
   if ( it != ErrCodeMap.end() )
      return it->second;
   return "";
}

int main()
{
   std::cout << getError("002") << "\n";
}

Live Example

如果错误代码的数据类型为int,则会使用std::map<int, std::string>

#include <map>
#include <string>
#include <iostream>

std::map<int, std::string> ErrCodeMap = 
   { {0, "No error"}, 
     {1, "DB Connection error"}, 
     {2, "Error in processing"} };

std::string getError(int errCode)
{
   auto it = ErrCodeMap.find(errCode);
   if ( it != ErrCodeMap.end() )
      return it->second;
   return "";
}

int main()
{
   std::cout << getError(2) << "\n";
}

Live Example using int

答案 1 :(得分:1)

我认为标准模板库的课程模板unordered_mapmap符合您的目的。

无序映射是关联容器,用于存储由键值和映射值组合形成的元素,键值通常用于唯一标识元素,而映射值是具有与此键关联的内容的对象。无序映射中的元素不会按照其键值或映射值以任何特定顺序排序。

映射是关联容器,用于存储由键值和映射值组合形成的元素,键值通常用于排序和唯一标识元素,而映射值存储与此键关联的内容。在内部,地图中的元素始终按其键排序。

无序地图容器比地图容器更快,可以通过键来访问单个元素,尽管它们通过元素子集进行范围迭代的效率通常较低。

将错误代码存储为关键字和结构(如下图所示),其中包含位置和错误说明作为映射值。

struct error_info{
    int position;
    char * description;
};

编辑:

这是代码,

#include <iostream>
#include <map>
using namespace std;

struct error_info{
    int position;
    char * description;
};

struct error_info get_error(map<int, struct error_info> error_map, int error_code){
    return error_map[error_code];   
}

int main(){
    map<int, struct error_info> error_map;

    error_map[000] = {1, (char *)"no error"};
    error_map[001] = {2, (char *)"DB connection error"};
    error_map[003] = {3, (char *)"error in processing"};

    struct error_info info = get_error(error_map, 001);
    cout << info.position << " " << info.description << endl;
    return 0;
}

Live example

希望这会对你有所帮助。