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