我正在尝试制作一个简单的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上,然后比较它(使用前面的重载比较运算符)并返回true
或false
。
相反,当我尝试构建项目时,我收到此错误:
/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),