gpt4 book ai didi

c++ find_if 找不到谓词

转载 作者:太空狗 更新时间:2023-10-29 23:52:42 27 4
gpt4 key购买 nike

我收到错误:

no matching function for call to ‘findByPosition::findByPosition(std::vector<int>::size_type&, std::vector<int>::size_type&)’

当我将 ik 转换为 int 时,我得到:

no matching function for call to ‘findByPosition::findByPosition(int, int)’

我不知道我的谓词有什么问题。我根据需要重载了 () 运算符:

struct findByPosition
{
const Node needle;
findByPosition(const Node& sought) : needle(sought) {}
bool operator()(int i,int j) const
{
return ((needle.i == i) && (needle.j == j));

}
};

SparseMatrix& SparseMatrix::operator*=(const SparseMatrix &other)
{
SparseMatrix SparseMatrixResult(_numRow, other._numCol);
vector<Node>::iterator rowMulti, colMulti;

if(_numCol != other._numRow)
{
// error multiplying
}

for(std::vector<int>::size_type i = 0; i != (unsigned int)_numRow; i++) {

for(std::vector<int>::size_type j = 0; j != (unsigned int)_numCol; j++) {

for(std::vector<int>::size_type k = 0; k != (unsigned int)_numCol; k++)
{
rowMulti = find_if(_matrix.begin(), _matrix.end(), findByPosition(i,k));
}
}
}

*this = SparseMatrixResult;
return *this;
}

_matrix 的类型:

vector<Node> _matrix;

最佳答案

当您调用 findByPosition(i,k) 时,您实际上是在尝试调用构造函数,而不是 operator()

您需要定义一个构造函数,然后您可以在该行使用它来生成一个对象find_if 然后将调用 theobject(i,j) 在内部 调用 operator()

从错误中可以看出这一点

no matching function for call to ‘findByPosition::findByPosition(int, int)’

它试图找到构造函数

要正确使用谓词,您需要实际翻转运算符和构造函数。构造函数应该采用 i,j 因为它对仿函数的所有调用都是通用的,而运算符应该引用 const Node& 因为这是矩阵,是将调用仿函数的数据类型。

struct findByPosition
{
findByPosition(int _i, int _j) : i(_i), j(_j) {}
bool operator()(const Node& needle) const
{
return ((needle.i == i) && (needle.j == j));

}
private:
int i,j;
};

这样,构造函数将构造一个保存了i,j 的对象,然后将其传递给您的find_if 函数。

关于c++ find_if 找不到谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372232/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com