【问题标题】:STL SET Iterator assignment no viable candidateSTL SET 迭代器分配没有可行的候选者
【发布时间】:2015-07-04 06:08:47
【问题描述】:

我有一个使用带有迭代器的 STL 集的 C++ 程序。集合和迭代器定义为:

 set<TokenTableEntry*, Comparator> _XCLITokenTable;

 set<TokenTableEntry*>::const_iterator it;

我有一个名为 findToken 的例程(如下所示),它有一个语句:

 it = _XCLITokenTable.find(_TokenTableEntry);

产生错误信息的原因:

"隐式 std::_Tree std::less,std::allocator,0>>::const_iterator::operator=(const std::_Tree,std::allocator,0>>::const_iterator &)" 不是可行的候选者。

我不知道这条消息告诉我什么或如何更正它。任何人都可以提出建议吗?

感谢您的帮助。

约翰

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;
}

【问题讨论】:

    标签: c++ stl set


    【解决方案1】:

    您应该将it 声明为

    set<TokenTableEntry*, Comparator>::const_iterator it;
    

    如果 C++11 可用,您也可以使用 auto

    auto it = _XCLITokenTable.find(_TokenTableEntry);
    

    (最好声明int XCLITokenTable::findToken(...) const,所以find的返回类型将是const_iterator

    【讨论】:

    • 哇!我为此工作了几个小时,却一无所获。您的解决方案是 100% 正确的。非常感谢。
    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多