c++ - Iterator and templates -


i try manipulate iterators.

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

this code compiling.but when want use it, no longer compiling: here example:

int main()  {     myclass <string> t0 ( "caacaa" );     set<int> r=t0.test("a");     return 0;  } 

i error:

 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 here test.cpp:25:48: error: conversion ‘std::basic_string<char>::const_iterator {aka __gnu_cxx::__normal_iterator<const char*, std::basic_string<char> >}’ non-scalar type ‘std::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >}’ requested 

i tried figure out wrong don't understand error.

in const member function, member data const too. need use const_iterator:

typename mytype::const_iterator = myarg.begin(); 

because myarg.begin() returns const iterator, because myarg const, because member function const.

even better use auto:

auto = myarg.begin();  

but still need know it const — auto helps avoid typing long name, not knowing fact it const.


Comments

Popular posts from this blog

java - Intellij Synchronizing output directories .. -

git - Initial Commit: "fatal: could not create leading directories of ..." -