问题我已经发过,没过多久就沉了,我迫不得已再发一遍,直到大神出现。
原问题链接
我不明白为什么会无法vector解引用。难道是因为我自定义的迭代器有问题吗?
这里附上迭代器定义以及实现代码(截取片段):'
1 class DLL_LEAPS_API const_iterator
2 {
3 private:
4 CLeap* _pNow;
5 public:
6 const_iterator(CLeap *p = nullptr):_pNow(p){}
7 const_iterator& operator=(CLeap *p){ _pNow=p; return *this;}
8 const const_iterator operator++();
9 const const_iterator operator++(int);
10
11 const CLeap& operator*()const;
12 CLeap& operator*();
13
14 bool operator==(const const_iterator& iter)const;
15 bool operator!=(const const_iterator& iter)const;
16
17 };
18 //自定义迭代器
19 typedef const_iterator iterator;
其中标准的begin()和end()函数定义在迭代器的容器类CLeaps中,实现代码:
1 CLeaps::iterator CLeaps::begin()
2 {
3 return static_cast<iterator>(&(*(leaps.begin())));
4 }
5 CLeaps::iterator CLeaps::end()
6 {
7 return static_cast<iterator>(&(*(leaps.end())));
8 }
再次附上测试代码:
复制代码
1 #include "DLL_Leaps.h"
2
3 int _tmain(int argc, _TCHAR* argv[])
4 {
5 CLeaps myleaps;
6 myleaps.setfile("data.dat");
7 //初始化一个leap
8 CLeap myleap0(string("do activity_0").c_str(),time(nullptr),false);
9 CLeap myleap1(string("do activity_1").c_str(),time(nullptr),false);
10 CLeap myleap2(string("do activity_2").c_str(),time(nullptr),false);
11 myleaps.append(myleap0);
12 myleaps.append(myleap1);
13 myleaps.append(myleap2);
14 cout<<std::setiosflags(ios::left)
15 <<setw(20)<<"reason"
16 <<setw(20)<<"time"
17 <<setw(20)<<"execute_state"
18 <<endl;
19
20 for(auto obj: myleaps )
21 {
22 leapRecord r=obj.enquireRecord();
23 char t[255];
24 ctime_s(t,255,&r.time);
25 cout<<std::setiosflags(ios::left)
26 <<setw(20)<<r.reason
27 <<setw(20)<<t
28 <<setw(20)<<r.executed
29 <<endl;
30 }
31
32 bool res=myleaps.save();
33 if (!res) cout<<"save fail!"<<endl;
34 else cout<<"save sucessed!"<<endl;
35
36 system("pause");
37 return 0;
38 }执行到20行就报错,逐步执行发现是执行到了end()函数,里面有*(vector::iterator),就是这里解引用失败。
完全搞不清什么状况。
求救,我的这个问题搁浅快半个月了,无人问津。
豆子都压出去了,实在没有可以悬赏的了,跪求大神。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1868/viewspace-3144595/ ,如需转载,请注明出处,否则将追究法律责任。