表达式:map / set iterators在地图创建时不兼容断言

时间:2014-05-14 15:16:52

标签: c++ map set assert

我的代码导致断言失败。当我只在地图中留下一个项目(对)时,代码可以正常工作,但是两个或多个会触发错误。我在调试器下跟踪它,看到所有涉及类型的实例(我的意思是对,集合)都是正确创建的。但是当流程以包含表定义的分号结束时,我会弹出这个断言失败。

basic.hpp

namespace ccnet
{

enum class master_command_code 
{
  RESET                   = 0x30,
  GET_STATUS              = 0x31
};

enum class slave_message_type 
{
  GENERAL = 1, // response to a master command bearing data
  ACK     = 0,
  NACK    = 0xff,
  ILLEGAL = 0x30,
  UNKNOWN = 2 // if we are unable to identify the data
};

/** Slave message set. */
typedef std::set<slave_message_type> slave_messsage_set_type;

const slave_messsage_set_type& allowed_reply(master_command_code code);
} // namespace ccnet

basic.cpp

const ccnet::slave_messsage_set_type& ccnet::allowed_reply(master_command_code code)
{
  typedef map<master_command_code, slave_messsage_set_type> master_slave_table_map;

  static const master_slave_table_map table =
    {
      // applicable in all states
      { master_command_code::RESET,
        { slave_message_type::ACK, slave_message_type::NACK } },

      { master_command_code::GET_STATUS,
        { slave_message_type::GENERAL, slave_message_type::NACK } }
    }; // <-- assert here

  const auto it = table.find(code);
  if (it == table.end())
  {
    throw std::runtime_error(
      "Unregistered/unimplemented master command code specified");
  }

  return it->second;
}

我不知道它为什么会发生,代码看起来很好。 我用的是MSVC-12。这不是线程并发问题,我已经检查过了。它是静止的;我把它放在main()的第一行并且有问题。 (

0 个答案:

没有答案