我不能完全弄清楚爲什麼這段代碼導致分段錯誤......任何幫助將是偉大的。
#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