-1

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

这是代码:

     multimap<int,std::vector<strings >frames>> mt;

……………………

mt.insert(pair<int,std::vector<string>(threadid,funcname));

编译时出现错误错误:'threadid' 不能出现在常量表达式中错误:'funcname' 不能出现在常量表达式中。

请帮助我将值分配给多图。

4

2 回答 2

2

一个明显的错误是您缺少一个右尖括号。替换这个:

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));
于 2013-05-14T08:52:17.343 回答
0

pair 以您未指定的类型为模板。

您可以使用

mt.insert(std::make_pair(threaded, funcname));

这将推导出模板参数,或者您明确指定它们(不推荐):

mt.insert(std::pair<int, std::vector<std::string>>(threadId, funcname));

编辑:

make_pair 存在的原因是任何构造函数都将是指定类的成员,因此无法推断出自己的类型。make_pair 是一个免费函数,因此没有这个限制。

于 2013-05-14T08:39:45.133 回答