我试图操纵迭代器 .
template <typename Mytype>
class Myclass
{
public:
Myclass ( const Mytype & myarg)
{
this->data=myarg;
}
~Myclass ( void ){}
set<int> Test ( const Mytype & myarg ) const
{
set<int> result;
typename Mytype::iterator it=myarg.begin();
return result;
}
private:
//
mutable Mytype data;
};
这段代码正在编译 . 但是当我想使用它时,它不再编译:这是一个例子:
int main()
{
Myclass <string> t0 ( "caacaa" );
set<int> r=t0.Test("a");
return 0;
}
我现在得到一个错误:
test.cpp: In member function ‘std::set<int>
Myclass<Mytype>::Test(const Mytype&) const [with Mytype =
std::basic_string<char>]’:
test.cpp:38:26: instantiated from here
test.cpp:25:48: error: conversion from
‘std::basic_string<char>::const_iterator {aka
__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> >}’ to non-scalar type ‘std::basic_string<char>::iterator {aka
__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >}’ requested
我试图弄清楚出了什么问题,但我不明白这个错误 .
1 回答
在const成员函数中,成员数据也是const . 所以你需要使用
const_iterator
:因为
myarg.begin()
返回const迭代器,因为myarg
是const,因为成员函数是const .更好用
auto
:但是你仍然需要知道
it
是const -auto
可以帮助你避免输入长名称,而不知道it
是const的事实 .