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()) 返回“未知”; 返回->秒; }
上面显示的代码抛出“error:type–const error\u code\u entry\u t的标量初始值设定项周围的大括号”,有人能帮我修复它吗?在C++11中,这很好,尽管可以通过直接初始化映射而不是使用数组来简化它 如果你被困在过去,那么你不能从括号内的初始化器列表中初始化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
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")
;