0

我正在尝试对存储在向量中的 C++ 中的一些节点进行排序。

 bool compare_func(const node* a, const node* b)
 {
    return a->getPoint()<b->getPoint();
 }

其中 getPoint() 返回一个浮点数,我想通过该浮点数对向量进行排序。

但是,当我运行它时:

 std::sort(dataSet.begin(), dataSet.end(), compare_func);

我得到:

error C2662: 'node::getStartPoint' : cannot convert 'this' pointer from 'const node' to 'node &
error C2662: 'node::getStartPoint' : cannot convert 'this' pointer from 'const node' to 'node &'
error C2039: 'sort' : is not a member of 'std'
error C3861: 'sort': identifier not found

我的文件顶部有这个:

using namespace std;
std::vector<node*> dataSet;

提前致谢!

更新:我重载了 getPoint 函数并且确实忘记了算法包含,[我以为我曾一度包含它]。

谢谢!

4

3 回答 3

4

前两个错误看起来像是在调用getStartPoint()一个const对象,而成员函数不是const. 要解决这个问题:

point getStartPoint() const;
                      ^^^^^

后两个是因为您没有包含声明的标题std::sort

#include <algorithm>
于 2013-08-05T15:26:59.547 回答
1

看起来您需要提供以下const重载node::getPoint()

struct node
{
  ...
  SomePoint getPoint() const { return .... ; }
  //                   ^^^^^
};

除此之外,您还需要<algorithm>包含std::sort.

于 2013-08-05T15:25:21.977 回答
0
#include <algorithm>

并将您的函数声明为 const

point getStartPoint() const;

因为您正在调用它const node,所以只有声明为 const 的函数可能会在 const 对象上调用。这样的函数不能更改任何类成员(声明为 除外mutable)。

声明成员方法会导致函数声明将成员指针作为第一个参数。例如:

class node{
public:
    point getStartPoint();
    point getStartPoint(int arg);
};

结果是

point node::getStartPoint(node* this);
point node::getStartPoint(node* this, int arg);

但:

class node{
public:
    point getStartPoint() const;
    point getStartPoint(int arg) const;
};

结果是

point node::getStartPoint(const node* this);
point node::getStartPoint(const node* this, int arg);

因此错误

错误 C2662:“node::getStartPoint”:无法将“this”指针从“const node”转换为“node &

于 2013-08-05T15:29:42.770 回答