2017-04-18 53 views
0

在课堂管理的属性值设置为obcjects我有以下方法:排序向量通过这些对象

void Manager::SortElementsById() 
{ 
    sort(world->GetElements().begin(), world->GetElements().end(), compareById); 
} 

bool compareById(const Element* element1, const Element* element2) 
{ 
    return element1->Id < element2->Id; 
} 

世界是一个指向类世界的对象。世界级包含:

vector<Element*> elements; 
vector<Element*> World::GetElementss() 
{ 
    return this->elements; 
} 

类元素包含:

int Id; 

我有2个问题:

  1. 为什么它不工作?我有以下错误:“错误C2065'compareById':未声明的标识符”

  2. 最终我想通过公共方法GetId()获得这些字段的私有和返回值。当我想在const对象上执行这个方法时,它是illigal,所以我不知道我能做些什么来在这些条件下排序这些向量。

回答

1

I have following error: "Error C2065 'compareById': undeclared identifier"

像往常一样,compareById必须在使用它之前宣布。 (除非是同一个班的一流功能中的一员,但它似乎并没有成为一个类成员都没有。)

It is illigal when i want to execute this method on const object

听起来像是你需要让你的函数一个const成员功能。声明它像

int GetId() const; 

并且您将被允许在const对象上调用它。

+0

该错误实际上是由错误的顺序造成的。但现在,当我执行SortElementsById()方法时,我有运行时错误:“表达式:矢量迭代器不兼容”。 – Sigger

+0

这是因为'GetElements()'返回一个向量的副本,而不是同一个向量,所以'world-> GetElements()。begin()'和'world-> GetElements()。end()'是两个迭代器不同的载体。 'GetElements()'应该通过引用返回。 – aschepler

+0

我已经解决了我所有的问题,非常感谢。 – Sigger