【发布时间】:2019-04-12 21:09:35
【问题描述】:
这里有什么问题?核心转储?我做错了什么?
#include <cstdio>
#include <map>
#include <cmath>
#include <cstring>
#include <iostream>
bool compFloats (const float f1, const float f2){
return floor (f1) < floor (f2);
};
int main (int argc, char **argv){
std::map < float, char, decltype (&compFloats) > m;
m.emplace (3.9, 'a');
m.emplace (3.1, 'b');
m.emplace (4.1, 'c');
m.emplace (4.5, 'd');
m.emplace (5.2, 'e');
for (auto i = m.begin (); i != m.end (); i++)
printf ("%c ", i->second);
printf ("\n");
printf ("hello world\n");
return 0;
}
【问题讨论】:
-
您可能会更加好奇,并删除了
map声明中的第三个模板参数,以查看结果是否发生变化。 -
有语法错误,还是逻辑错误?它在第二次执行 emplace 时转储。
-
好吧,照我说的做。删除第三个模板参数,重建/重新运行您的应用程序。如果它没有崩溃,那么可能会在您的问题中添加更多关于您观察到的内容?由于“缺乏研究”,您即将投反对票。
-
当第三个参数被取消时,比较不同并且程序可以工作。
-
既然你已经完成了,这一切都应该在你发布之前完成。然后在问题中,您可以说“当我删除第三个参数时,我的程序不再崩溃。第三个参数中的什么会导致这种情况?”。这将是一种更好的方式来提出问题,而不是像你最初所做的那样。
标签: c++