C ++ std :: find比较指向引用的指针

时间:2016-07-04 21:02:31

标签: c++11 lambda std-function

我正在尝试制作一个简单的Graph系统。

(我正在呼叫我的节点" Cell",但他们只是基本上是节点)

这是我的标题:

class Cell {
 public:
  virtual ~Cell() {}
  Cell(int row, int column);
  std::tuple<int, int> getCoord() const;
  void link(Cell& adjacent, bool biDirectional = true);
  void unlink(Cell& adjacent, bool biDirectional = true);
  friend std::ostream& operator<<(std::ostream& out, const Cell& cell);
  bool operator==(const Cell& other) const;

 private:
  bool isLinked(const Cell& cell) const;
  int mRow, mColumn;
  std::vector<Cell*> links;
};

正如您所看到的,我重载了等效运算符,因此我可以通过坐标比较单元格。这是我.cpp文件中的相关方法:

bool Cell::operator==(const Cell& other) const {
  return mRow == other.mRow && mColumn == other.mColumn;
}

bool Cell::isLinked(const Cell& cell) const {
  return std::end(links) ==
         std::find(std::begin(links), std::end(links),
                   [cell](Cell* cellPtr) { return (*cellPtr) == cell; });
}

正如您所看到的,当我想比较等效时,我会检查x,y坐标是否相同。在我的Cell::isLinked方法中,我取std::vector<Cell*> links并将它们传递给std::find,然后将对象放在ptr上,然后比较它(使用前面的重载比较运算符)并返回truefalse

相反,当我尝试构建项目时,我收到此错误:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:865:22: error: 
      invalid operands to binary expression ('Cell *' and 'const (lambda at Cell.cpp:51:20)')
        if (*__first == __value_)
            ~~~~~~~~ ^  ~~~~~~~~
Cell.cpp:50:15: note: in instantiation of function template specialization
      'std::__1::find<std::__1::__wrap_iter<Cell *const *>, (lambda at Cell.cpp:51:20)>' requested here
         std::find(std::begin(links), std::end(links),

0 个答案:

没有答案