错误:使用multimap时不能出现在常量表达式中

error:cannot appear in constant expression while using multimap

本文关键字:常量 表达式 不能 使用 multimap 错误      更新时间:2023-10-16

我正在编写程序,以获得具有多个线程的进程的回溯。我正在使用多重映射,以便每个线程的回溯可以映射到相应的线程。

代码如下:

     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是一个自由函数,所以没有这个限制。