我不能完全弄清楚为什么这段代码导致分段错误......任何帮助将是伟大的。
#include <iostream>
#include <set>
using namespace std;
class A{
public:
int _x;
A(int x){
_x = x;
}
};
bool fncomp(A a1, A a2){
return a1._x < a2._x;
}
int main(){
bool(*fn_pt)(A,A) = fncomp;
set<A, bool(*)(A,A)> testSet;
for(int i=0; i<10; i++){
cout << i << endl;
A a(i);
testSet.insert(a);
}
}
输出是:
0
1
Segmentation Fault
啊......这似乎已经完成了帽子戏法。愚蠢的错误!再次感谢! – Andrew 2011-03-24 20:25:55
我刚碰到这个。这是一个愚蠢的错误。但我不明白为什么默认的构造函数是允许的。我声明该集合需要一个函数,并且我不用一个构造它,这没关系? – philo 2013-03-14 01:01:15
@philo:嗯,大多数人使用*功能对象*作为比较器,即重载'operator()'的类。在这种情况下,类类型被用作模板参数,而比较对象本身(构造函数参数)通常被默认构造。一个默认构造的比较对象正是大多数情况下需要的,所以它工作正常。 – AnT 2013-03-14 01:40:05