2013-09-20 33 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不再有这个限制。