[問題] iterator實做 debug

看板C_and_CPP作者 (zenix)時間15年前 (2009/05/29 16:54), 編輯推噓0(008)
留言8則, 2人參與, 最新討論串1/1
#include<iostream> using namespace std; template<typename T> class obj { private: T* data; int n; public: obj(){data=new T[10];n=0;} void push(const T& a){data[n++]=a;} ~obj(){delete []data;n=0;} const T& operator[](int num){return data[num];} class Iter { private: obj* ptr; int nn; public: Iter(){ptr=0,nn=0;} Iter(const obj& a){ptr=a;nn=0;} const T& operator*(){return ptr->data[nn];} //cannot convert `const obj<int>' to `obj<int>*' in assignment const Iter operator=(const Iter& a) { ptr=a.ptr; nn=a.nn; return a; } const Iter operator+=(int num){nn+=num;return *this;} bool operator!=(const Iter& a){if(nn!=a.nn)return 1;return 0;} ~Iter(){ptr=0,nn=0;} }; const Iter begin(){Iter s(*this);return s;} //In constructor `obj<T>::Iter::Iter(const obj<T>&) [with T = int]': //instantiated from `const obj<T>::Iter obj<T>::begin() [with T = int]' const Iter end(){Iter s(*this);s+=n;return s; } }; main() { obj<int> a; a.push(1); a.push(2); a.push(3); obj<int>::Iter it; //instantiated from here for(it=a.begin();it!=a.end();it+=1){cout<<*it<<" ";} system("pause"); } //dev C++顯示的錯我都寫在註解了 //可是我真的不知道是哪的問題 //縮排沒排好,請見諒 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.165.104.173

05/29 20:21, , 1F
Iter(const obj& a){ptr=a;nn=0;} ptr是指標 a是參考
05/29 20:21, 1F

05/29 20:25, , 2F
這邊要碼你把ptr弄成const不然就把參數的const拿掉...
05/29 20:25, 2F

05/29 22:52, , 3F
改了後變成cannot convert 'const obj<int>' to 'const
05/29 22:52, 3F

05/29 22:52, , 4F
obj<int>*'了
05/29 22:52, 4F

05/29 22:57, , 5F
好像不是這個問題?
05/29 22:57, 5F

05/29 23:02, , 6F
...Iter(obj& a){ptr=&a;nn=0;}
05/29 23:02, 6F

05/29 23:03, , 7F
沒說清楚..最上面兩行分別說明著兩個問題點..
05/29 23:03, 7F

05/29 23:10, , 8F
歐吔!能動了!太謝謝你了
05/29 23:10, 8F
文章代碼(AID): #1A7wB337 (C_and_CPP)