亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 7474 | 回復(fù): 2
打印 上一主題 下一主題

[C++] 請教一個vector的find_if的使用問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-10-27 22:27 |只看該作者 |倒序瀏覽
請教一個vector的find_if的使用問題

    我用C++寫了一個根據(jù)單據(jù)類(即:BaseOrder)中的來源編碼字段(即:SourceID),在標(biāo)準(zhǔn)單據(jù)庫(即:StdOrders)中查找指定單據(jù),并把查到的單據(jù)存放到目標(biāo)單據(jù)庫(即:TargetOrders)中的代碼。其中,數(shù)據(jù)的組織格式用到了vector,查尋時用到了vector的find_if功能(代碼如下),但是,在編譯的時候卻通不過,不知道是什么原因,希望高手們能指點一下......

(注1:開發(fā)平臺為:Ubuntu8.10 + Codeblocks + wxWidgets2.8 + wxFormbuilder)
(注2:盡管平臺不同,但是,自認(rèn)為查尋部分的代碼是按C++的標(biāo)準(zhǔn)來編寫的,大家如有不認(rèn)可的地方,也歡迎指出,呵呵....)

//==========================================
// 定義部分
//==========================================

//定義Order
class BaseOrder;

typedef vector<BaseOrder*> tagCommonOrders;
typedef vector<BaseOrder*>::iterator tagCommonOrdersIterator;

class BaseOrder
{
  private:
    int SourceID;
  public:
    BaseOrder(int CurSourceID);
    int GetSourceID(){return SourceID;};
};

//定義Order的查尋類
class FindBaseOrderByID
{
    private:
        int SourceID;
    public:
        FindBaseOrderByID(const  int CurSourceID):SourceID(CurSourceID) { };
        bool operator()(const BaseOrder& CurOrder) const {   return  (( ( BaseOrder& ) CurOrder).GetSourceID()) == SourceID; }; //注:這是編譯輸出信息中提到的第121行
};

//定義Order的實際應(yīng)用類
class MyOrderDlg: public GUIDialog
{
    public:
        MyOrderDlg(wxDialog *dlg);
        ~MyOrderDlg();
    private:
        void __AppendToOrdersByID(int CurID, tagCommonOrders CurTargetOrders, tagCommonOrders CurStdOrders);
}

//==========================================
// 代碼部分
//==========================================

//根據(jù)ID從標(biāo)準(zhǔn)的Orders中尋找合適的Order,并將它放入目標(biāo)Orders中
void MyOrderDlg::__AppendToOrdersByID(int CurID, tagCommonOrders CurTargetOrders, tagCommonOrders CurStdOrders)
{
    tagCommonOrdersIterator ri = CurStdOrders.begin();  //準(zhǔn)備好標(biāo)準(zhǔn)Orders的迭代器
    while(ri!=CurStdOrders.end()){
        ri = find_if(ri, CurStdOrders.end(), FindBaseOrderByID(CurID));  // 根據(jù)CurID在標(biāo)準(zhǔn)Orders中查找Order,注:這是編譯輸出信息中提到的第488行
        if(ri!=CurStdOrders.end()){  //如果找到了
            CurTargetOrders.push_back(*ri);  //就把它存入目標(biāo)Orders中
            ri++; //準(zhǔn)備查尋下一個
        }
    }
}

//==========================================
// 編譯時的輸出信息
//==========================================

||=== MyOrderDlg, Debug ===|

/usr/include/c++/4.3/bits/stl_algo.h||In function ‘_RandomAccessIterator std::__find_if(_RandomAccessIterator, _RandomAccessIterator, _Predicate, std::random_access_iterator_tag) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<BaseOrder**, std::vector<BaseOrder*, std::allocator<BaseOrder*> > >, _Predicate = FindBaseOrderByID]’ : |

/usr/include/c++/4.3/bits/stl_algo.h|3837|instantiated from ‘_IIter std::find_if(_IIter, _IIter, _Predicate) [with _IIter = __gnu_cxx::__normal_iterator<BaseOrder**, std::vector<BaseOrder*, std::allocator<BaseOrder*> > >, _Predicate = FindBaseOrderByID]’|

/home/yanyan/myprojs/MyOrderDlg.cpp|488|instantiated from here|

/usr/include/c++/4.3/bits/stl_algo.h|226|錯誤: 對‘(FindBaseOrderByID) (BaseOrder*& ) ’的調(diào)用沒有匹配|
/home/yanyan/myprojs/MyOrderDlg.h|121|附注: 備選為: bool FindBaseOrderByID :: operator() ( const BaseOrder& ) const|
/usr/include/c++/4.3/bits/stl_algo.h|230|錯誤: 對‘(FindBaseOrderByID) (BaseOrder*& ) ’的調(diào)用沒有匹配|
/home/yanyan/myprojs/MyOrderDlg.h|121|附注: 備選為: bool FindBaseOrderByID :: operator() ( const BaseOrder& ) const|
......

||=== Build finished: 14 errors, 0 warnings ===|

======================================================================
后來,我將 121 行那段改成了下面這樣,然后又再試了一下:
        FindBaseOrderByID(const BaseOrder& CurOrder) { SourceID = (( BaseOrder& ) CurOrder).GetSourceID(); };
        bool operator()(const int& CurSourceID) const {   return  CurSourceID == SourceID; };
結(jié)果,錯誤又變成了:
/home/yanyan/myprojs/MyOrderDlg.cpp|488|錯誤: 對‘FindBaseOrderByID::FindBaseOrderByID(int)’的調(diào)用沒有匹配的函數(shù)|
/home/yanyan/myprojs/MyOrderDlg.h|121|附注: 備選為: FindBaseOrderByID::FindBaseOrderByID(const BaseOrder& ) |
/home/yanyan/myprojs/MyOrderDlg.h|115|附注:          FindBaseOrderByID::FindBaseOrderByID(const FindBaseOrderByID& ) |

請問,上面程序的問題在哪里?怎樣根據(jù)成員變量,用find_if來查詢vector中的某個值?

謝謝。。

[ 本帖最后由 mrguo 于 2009-10-27 22:54 編輯 ]

論壇徽章:
0
2 [報告]
發(fā)表于 2009-10-28 16:26 |只看該作者
你vector的元素類型是 BaseOrder*  而你比較函數(shù)對象的參數(shù)類型是BaseOrder& (bool operator()(const BaseOrder& CurOrder) const )  所以類型不匹配....

論壇徽章:
0
3 [報告]
發(fā)表于 2009-10-29 19:25 |只看該作者
感謝2樓 dhb118 的指點。!

根據(jù)2樓的提示,將對BaseOrder的引用改成了對BaseOrder指針的引用,就可以編譯通過了.。

再次感謝 dhb118 同學(xué),呵呵.....
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP