C++ 类型const GCC的标量初始值设定项周围的大括号 typedef std::map error\u code\u tbl\t; typedef error_code_tbl_t::value_type error_code_entry_t; 常量错误\u代码\u条目\u t错误\u代码\u tbl\u[]={ {ERR_OK,“ERR_OK”}, {ERR_RT_OUT_MEMORY,“ERR_RT_OUT_MEMORY”}, // ... }; 常量错误代码错误代码(begin)(错误代码) ,结束(错误代码待定); 常量字符*err2msg(整数代码) { const error\u code\u tbl\u t::const\u迭代器it=error\u code\u tbl.find(code); if(it==error\u code\u tbl.end()) 返回“未知”; 返回->秒; }

C++ 类型const GCC的标量初始值设定项周围的大括号 typedef std::map error\u code\u tbl\t; typedef error_code_tbl_t::value_type error_code_entry_t; 常量错误\u代码\u条目\u t错误\u代码\u tbl\u[]={ {ERR_OK,“ERR_OK”}, {ERR_RT_OUT_MEMORY,“ERR_RT_OUT_MEMORY”}, // ... }; 常量错误代码错误代码(begin)(错误代码) ,结束(错误代码待定); 常量字符*err2msg(整数代码) { const error\u code\u tbl\u t::const\u迭代器it=error\u code\u tbl.find(code); if(it==error\u code\u tbl.end()) 返回“未知”; 返回->秒; },c++,stdmap,value-type,C++,Stdmap,Value Type,上面显示的代码抛出“error:type–const error\u code\u entry\u t的标量初始值设定项周围的大括号”,有人能帮我修复它吗?在C++11中,这很好,尽管可以通过直接初始化映射而不是使用数组来简化它 如果你被困在过去,那么你不能从括号内的初始化器列表中初始化value\u type,这是std::pair专业化的别名;尽管某些编译器可能允许将其作为非标准扩展。相反,您需要: typedef std::map<int, const char*> error

上面显示的代码抛出“error:type–const error\u code\u entry\u t的标量初始值设定项周围的大括号”,有人能帮我修复它吗?

在C++11中,这很好,尽管可以通过直接初始化映射而不是使用数组来简化它

如果你被困在过去,那么你不能从括号内的初始化器列表中初始化
value\u type
,这是
std::pair
专业化的别名;尽管某些编译器可能允许将其作为非标准扩展。相反,您需要:

typedef std::map<int, const char*> error_code_tbl_t;
typedef error_code_tbl_t::value_type error_code_entry_t;
const error_code_entry_t error_code_tbl_[] = {
    { ERR_OK              , "ERR_OK" },
    { ERR_RT_OUT_OF_MEMORY, "ERR_RT_OUT_OF_MEMORY" }, 
    // ...
};
const error_code_tbl_t error_code_tbl( begin(error_code_tbl_)
                                     , end  (error_code_tbl_) );

const char* err2msg(int code)
{
    const error_code_tbl_t::const_iterator it = error_code_tbl.find(code);
    if(it == error_code_tbl.end())
      return "unknown";
    return it->second;
}

您似乎有一个C++03编译器,因为它应该在C++11中编译。 由于
error\u code\u entry\t
是映射的
值类型
,因此它实际上是一个
std::pair
(是的,密钥类型的常量是正确的)。这不是聚合,因此不能像那样初始化它。要修复当前的错误,您可以尝试以下操作:

const error_code_entry_t error_code_tbl_[] = {
    // Either like this
    error_code_entry_t(ERR_OK, "ERR_OK"),

    // Or like this
    std::make_pair(ERR_RT_OUT_OF_MEMORY, "ERR_RT_OUT_OF_MEMORY"),

    // ...
};
但是,既然你想把它们放在地图上,我会考虑Boo.Digi:

const error_code_entry_t error_code_tbl_[] = {
    error_code_entry_t( ERR_OK              , "ERR_OK" ),
    error_code_entry_t( ERR_RT_OUT_OF_MEMORY, "ERR_RT_OUT_OF_MEMORY" ), 
    // ...
};
#包括
const error\u code\u tbl\t error\u code\u tbl=boost::assign::map\u list\u of
(好吧,“好吧”)
(内存出错,“内存出错”)
;
#include <boost/assign/list_of.hpp>

const error_code_tbl_t error_code_tbl = boost::assign::map_list_of
  (ERR_OK              , "ERR_OK")
  (ERR_RT_OUT_OF_MEMORY, "ERR_RT_OUT_OF_MEMORY")
;