2013-09-20 32 views
1

我不確定下面的代碼有什麼問題,我嘗試使用成員函數比較器對類對象的數組進行排序。使用成員函數對類對象的數組進行排序

class Query { 
    public: 
     int start; 
     int end; 
     int index; 
     bool operator<(const Query &b) { 
      return this->start < b.start; 
     } 
}; 

Query query[q]; 

for (int i=0;i<q;++i) { 
    cin>>query[i].start>>query[i].end; 
    query[i].index = i; 
} 
sort(query,query+q); 

我得到以下錯誤:

error: no matching function for call to ‘sort(main()::Query [(((unsigned int)(((int)q) + -0x00000000000000001)) + 1)], main()::Query*)’

更新: 我想通了錯誤的原因。我已將課程包括在我的主要內容中。當我在main之外移動類定義時問題解決了。我沒有足夠的理解C++/OOP來理解爲什麼發生這種情況。如果有人能夠解釋或指導我獲得有用資源,我將不勝感激。

+0

你有沒有'#include '? – zch

+0

是的,謝謝。這個問題是不同的。以上所有代碼均位於main()內。但是當我在main之外移除類定義時,問題就解決了。我不明白爲什麼。 – elexhobby

+1

@elexhobby您應該[編輯]您的問題,並將其更改爲包含此信息。 – Dukeling

回答

2

本地類型(即函數內定義的類型)不能用作C++ 03中的模板參數(其中一個模板參數std::sort()是應該排序的對象的類型)。我不知道爲什麼C++ 03有這個限制。 C++ 11不再有這個限制。