我有一个使用带迭代器的 STL 集的 C++ 程序。集合和迭代器定义为:
set<TokenTableEntry*, Comparator> _XCLITokenTable;
set<TokenTableEntry*>::const_iterator it;
我有一个名为 findToken 的例程(如下所示),它有一个语句:
it = _XCLITokenTable.find(_TokenTableEntry);
产生错误信息的地方:
"implicit std::_Tree std::less,std::allocator,0>>::const_iterator::operator=(const std::_Tree,std::allocator,0>>::const_iterator &)" is not a viable candidate.
我不知道这条消息告诉我什么或如何更正它。谁能提出建议?
感谢您的帮助。
约翰
int XCLITokenTable::findToken (string name, TokenTableEntry *_TokenTableEntry)
{
int type;
type = -1;
string lookupName(name);
std::transform(name.begin(), name.end(), name.begin(), ::tolower);
_TokenTableEntry->name = lookupName;
**it = _XCLITokenTable.find(_TokenTableEntry);**
if (it != _XCLITokenTable.end())
{
if ((*it)->name == name)
{
type = (*it)->type;
tokenCount++;
*_TokenTableEntry = *(*it);
return type;
}
}
return type;
}
最佳答案
你应该将它
声明为
set<TokenTableEntry*, Comparator>::const_iterator it;
或者如果 C++11 可用,您可以使用 auto
:
auto it = _XCLITokenTable.find(_TokenTableEntry);
(最好声明 int XCLITokenTable::findToken(...) const
,因此 find
的返回类型将为 const_iterator
)
关于c++ - STL SET 迭代器分配没有可行的候选者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29867788/