[問題] vector iterators incompatible

看板C_and_CPP作者 (EricLai)時間9年前 (2016/05/29 11:55), 編輯推噓1(107)
留言8則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS2010 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 在執行到Class B上的 取得Class A的m_WorkingList 會出現 vector iterators incompatible的錯誤 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) typedef struct _Working_List { std::wstring RowNo; std::wstring Name; }Working_List; //-----class A-----// std::vector<Working_List> m_WorkingList; void A::InsertList() { for(...) { Working_List list; list.RowNo = L""; list.Name = L""; m_WorkingList.push_back(list); } } const std::vector<Working_List>& A::GetWorkingList() const { return m_WorkingList; } //------Class B------// std::vector<Working_List> list = A->GetWorkingList(); 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.117.32 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1464494125.A.B89.html

05/29 12:07, , 1F
你後續對 list 的操作有什麼?
05/29 12:07, 1F

05/29 12:07, , 2F
基本上這個錯誤常見原因是在不同的 vector 上取得 iterator
05/29 12:07, 2F

05/29 12:08, , 3F
之所以會是不同的 vector 的原因常見是有意/無意的複製
05/29 12:08, 3F

05/29 12:08, , 4F
但你寫的這段程式裡的複製只有取得 A 之後指定給 list 而已
05/29 12:08, 4F

05/29 12:09, , 5F
單單複製還不足以造成這問題, 要使用其 iterator 才會
05/29 12:09, 5F

05/29 12:09, , 6F
所以問題很可能在你對 list 的後續操作
05/29 12:09, 6F

05/29 12:20, , 7F
目前就是只要執行到GetWorkingList 就會出現錯誤了
05/29 12:20, 7F

05/29 12:20, , 8F
有點百思不得其解...
05/29 12:20, 8F
文章代碼(AID): #1NIcWjk9 (C_and_CPP)