作者zenixls2 (zenix)
看板C_and_CPP
標題[問題] iterator實做 debug
時間Fri May 29 16:54:26 2009
#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
1F:→ akasan:Iter(const obj& a){ptr=a;nn=0;} ptr是指標 a是參考 05/29 20:21
2F:→ akasan:這邊要碼你把ptr弄成const不然就把參數的const拿掉... 05/29 20:25
3F:→ zenixls2:改了後變成cannot convert 'const obj<int>' to 'const 05/29 22:52
4F:→ zenixls2:obj<int>*'了 05/29 22:52
5F:→ zenixls2:好像不是這個問題? 05/29 22:57
6F:→ akasan:...Iter(obj& a){ptr=&a;nn=0;} 05/29 23:02
7F:→ akasan:沒說清楚..最上面兩行分別說明著兩個問題點.. 05/29 23:03
8F:→ zenixls2:歐吔!能動了!太謝謝你了 05/29 23:10