ITPub博客

首页 > 应用开发 > > C++ 使用自定义动态链接库的错误vector无法解引用!

C++ 使用自定义动态链接库的错误vector无法解引用!

作者:germo 时间:2019-08-14 15:36:13 0 删除 编辑

问题我已经发过,没过多久就沉了,我迫不得已再发一遍,直到大神出现。

原问题链接

我不明白为什么会无法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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-07-17

  • 博文量
    209
  • 访问量
    8229