0
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;
}

上記のコードは、「エラー: タイプ âconst error_code_entry_t のスカラー初期化子を囲む中括弧」をスローします。

4

2 に答える 2

1

C++11 でコンパイルする必要があるため、C++03 コンパイラを使用しているようです。error_code_entry_tはマップのであるためvalue_type、実際には a ですstd::pair<const in, const char*>(はい、キー タイプの const は正しいです)。これは集計ではないため、そのように初期化することはできません。目前のエラーを修正するには、次のことを試してください。

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" ), 
    // ...
};

しかし、とにかくそれらをマップに配置したいので、boost.assign を検討します。

#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")
;
于 2013-08-16T14:39:28.740 に答える