所以我有一个名为WaterJug
的自定义对象,在调用全局set<WaterJug>
上的函数时遇到错误:
这是在类定义之前定义的:
set<WaterJug> memo;
在我班上的一种方法中:
for(std::vector<WaterJug>::iterator newJug = newJugs.begin(); newJug != newJugs.end(); ++newJug) {
const bool is_in = memo.find(newJug); //error here
if (is_in) {
}
}
错误是:No matching member function for call to 'find'
我是否必须在自定义类中实现任何接口才能使设置操作正常工作?
答案 0 :(得分:1)
你有几个错误。
错误的参数传递给memo.find
。
memo.find(newJug) // tpe of newJug is an iterator, not an object.
需要
memo.find(*newJug)
memo.find()
的返回值不是bool
。它是一个迭代器。而不是
const bool is_in = memo.find(newJug); //error here
if (is_in) {
使用:
if ( memo.find(*newJug) != memo.end() )
答案 1 :(得分:0)
std::set::find接受一个对象,newJug
是一个迭代器,而不是一个对象,来访问对象&#34;指向&#34;通过迭代器,您需要取消引用newJug
:*newJug
:
此外,find
返回一个迭代器,而不是bool
,它返回找不到对象os的end()
迭代器。
此版本的代码可以使用:
for(std::vector<WaterJug>::iterator newJug = newJugs.begin(); newJug != newJugs.end(); ++newJug) {
const bool is_in = ( memo.find(*newJug) != memo.end() );
if ( is_in ) {
}
}
答案 2 :(得分:0)
std::set::find
仅获取该集合的Folder1
File1-test
File2-test
Folder2
File3-test
File4-test
类型的参数。当您使用key
时,您使用memo.find(newJug)
而不是find
的迭代器调用key
。您可以取消引用迭代器以获取键值key
。
当memo.find(*newJug);
返回迭代器时,您还试图将find的返回值存储为bool
,这也是一个问题。如果您想知道find
是否找到了某些内容,那么您可以重写
find
要
const bool is_in = memo.find(newJug);