错误:使用multimap时不能出现在常量表达式中
error:cannot appear in constant expression while using multimap
我正在编写程序,以获得具有多个线程的进程的回溯。我正在使用多重映射,以便每个线程的回溯可以映射到相应的线程。
代码如下:
multimap<int,std::vector<strings >frames>> mt;
........................
mt.insert(pair<int,std::vector<string>(threadid,funcname));
当我编译我得到错误错误:'threadid'不能出现在常量表达式中错误:'funcname'不能出现在常量表达式中。
一个明显的错误是缺少一个右尖括号。替换:
mt.insert(pair<int,std::vector<string>(threadid,funcname));
与这个:mt.insert(pair<int,std::vector<string> >(threadid,funcname));
// ^ here
你可以通过使用std::make_pair
函数模板来简化一切:
mt.insert(std::make_pair(threadid, funcname));
pair是根据未指定的类型模板化的。
可以使用
mt.insert(std::make_pair(threaded, funcname));
,它将推断出模板参数,或者您可以显式指定它们(不推荐这样做):
mt.insert(std::pair<int, std::vector<std::string>>(threadId, funcname));
make_pair存在的原因是任何构造函数都将是指定类的成员,因此不能推断自己的类型。Make_pair是一个自由函数,所以没有这个限制。
相关文章:
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 使用自动推导的 lambda 参数作为常量表达式
- 生成提升::hana::set 的常量表达式问题
- 为什么不能用常量表达式声明数组?
- 不是 lambda 函数中的常量表达式
- 函数调用在常量表达式中必须具有常量值
- 错误:constexpr 变量'struct2Var'必须由常量表达式初始化
- 关于在需要常量表达式的上下文中使用的glvalue常量表达式的问题
- 生成 constexpr 字符串表,不能产生常量表达式
- 整体模板参数。错误:在常量表达式中使用'this'
- 如何在满足常量表达式的同时将整数传递给指针,传递给 std::array<double、integer>?
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- 错误:'new'不能出现在常量表达式中
- 我可以写出小于 -0.5 两个 ulps 的常量表达式双精度吗?
- 编译器在传递 const 变量时返回错误:模板参数不是常量表达式
- 为什么我不能在非常量表达式上使用此模板阶乘函数?
- C++ 使用变量而不是常量表达式初始化数组
- 使用函数参数作为常量表达式的一部分 - gcc vs clang
- 片段着色器中的"错误:在 GLSL 1.30 及更高版本中禁止使用非常量表达式索引的采样器数组"