集合迭代器处的多个标记


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

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

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>"不是从"const__gnu_cxx::__normal_iterator&lt_迭代程序L,_Container>'-没有为后缀"++"[-fpermission]声明"operator++(int)"-"std::set>"不是从"const std::_Rb_tree&lt_Key、_Val、_KeyOfValue、_Compare、_Alloc>'-"std::set>"不是从"const std::vector&lt_Tp,_Alloc>'-"std::set>"不是从"const std::_Rb_tree_iterator&lt_Tp>'-"std::set>"不是从"const std::list&lt_Tp,_Alloc>'-"std::set>"不是从"const std::_List_iterator&lt_Tp>'-"std::set>"不是从"const__gnu_cxx::__normal_iterator&lt_迭代程序,_Container>'-"std::set>"不是从"const__gnu_cxx::new_allocator&lt_Tp>'-"std::set>"不是从"const std::multiset&lt_关键字,_比较,_全部>>-"std::set>"不是从"const std::istream_iterator&lt_Tp,_CharT,_Traits,_Dist>'-"std::set>::迭代器{aka std::_Rb_tree_const_iterator>}"不是从"const"派生的std::设置&lt_关键字,_比较,_全部>>-"std::set>"不是从"const std::reverse_iterator&lt_迭代程序>'-"std::set>"不是从"const std::pair&lt_T1,_T2>'-"std::set>"不是从"const std::fpos&lt_StateT>'-候选人是:-从"std::set>::迭代器{aka std::_Rb_tree_const_iterator>}"转换为非标量请求类型"std::set>"-"operator!="不匹配(操作数类型为'std::set>'和'std::set>::迭代器{akastd::_Rb_tree_const_iterator>}')-"std::set>"不是从"const std::istreambuf_titerator&lt_CharT,_Traits>'-不匹配的类型"const_CharT*"one_answers"std::set>"-"std::set>"不是从"const std::basic_string&lt_CharT,_Traits,_Alloc>'-"std::set>"不是从"const std::allocater&lt_CharT>'

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

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

此外,作为一种风格,更喜欢按值返回messageToPrint,而不是使用out参数。

最新更新