set迭代器中的多个标记

时间:2013-12-26 22:33:18

标签: c++ stl iterator set

class FileObject
{
public:
set<string> owners;
.
.
.
};

在这个函数中我对这一行有疑问:for(std :: set it = owners.begin(); it!= owners.end(); it ++)。

void FileObject::viewFileDetails(string* messageToPrint)
{
    *messageToPrint = fileName;
    *messageToPrint += ", ";
    if(status == 0)
    {
        *messageToPrint += convertInt(countVersion);
    }
    else
    {
        *messageToPrint += userCheckedOut;
    }
    *messageToPrint += " (owners: ";
    unsigned int i=0;

    for(std::set<string> it = owners.begin(); it != owners.end(); it++)
    {
        *messageToPrint += *it;
        if( i != owners.size())
        {
            *messageToPrint += ", ";
        }
        else
        {
            *messageToPrint += ")";
        }
        i++;
    }

}

这是错误:

  

此行有多个标记        - 'std :: set&gt;'不是源于'const __gnu_cxx :: __ normal_iterator&lt; _IteratorL,_Container&gt;'        - 没有'operator ++(int)'为postfix' ++'[-fpermissive]声明        - 'std :: set&gt;'不是源自'const std :: _ Rb_tree&lt; _Key,_Val,_KeyOfValue,_Compare,_ Alloc&gt;'        - 'std :: set&gt;'不是源于'const std :: vector&lt; _Tp,_Alloc&gt;'        - 'std :: set&gt;'不是源于'const std :: _ Rb_tree_iterator&lt; _Tp&gt;'        - 'std :: set&gt;'不是源自'const std :: list&lt; _Tp,_Alloc&gt;'        - 'std :: set&gt;'不是源于'const std :: _ List_iterator&lt; _Tp&gt;'        - 'std :: set&gt;'不是源于'const __gnu_cxx :: __ normal_iterator&lt; _Iterator,_Container&gt;'        - 'std :: set&gt;'不是源于'const __gnu_cxx :: new_allocator&lt; _Tp&gt;'        - 'std :: set&gt;'不是源自'const std :: multiset&lt; _Key,_Compare,_Alloc&gt;'        - 'std :: set&gt;'不是源于'const std :: istream_iterator&lt; _Tp,_CharT,_Traits,_Dist&gt;'        - 'std :: set&gt; :: iterator {aka std :: _ Rb_tree_const_iterator&gt;}'不是从'const派生的        std :: set&lt; _Key,_Compare,_Alloc&gt;'        - 'std :: set&gt;'不是源于'const std :: reverse_iterator&lt; _Iterator&gt;'        - 'std :: set&gt;'不是源于'const std :: pair&lt; _T1,_T2&gt;'        - 'std :: set&gt;'不是源于'const std :: fpos&lt; _StateT&gt;'        - 候选人是:        - 从'std :: set&gt; :: iterator {aka std :: _ Rb_tree_const_iterator&gt;}'转换为非标量        输入'std :: set&gt;'要求        - 'operator!='不匹配(操作数类型是'std :: set&gt;'和'std :: set&gt; :: iterator {aka        std :: _ Rb_tree_const_iterator&gt;}')        - 'std :: set&gt;'不是源于'const std :: istreambuf_iterator&lt; _CharT,_Traits&gt;'        - 不匹配的类型'const _CharT *'和'std :: set&gt;'        - 'std :: set&gt;'不是源自'const std :: basic_string&lt; _CharT,_Traits,_Alloc&gt;'        - 'std :: set&gt;'不是源于'const std :: allocator&lt; _CharT&gt;'

1 个答案:

答案 0 :(得分:0)

it的类型应为set<string>::const_iteratorset<string>::iterator,而不是set<string>

如果您使用的是C ++ 11,则可以使用auto。 : - )

此外,作为一种风格问题,您希望按值返回messageToPrint,而不是使用out参数。