我是使用STL算法的新手,目前我停留在語法錯誤上。我的總體目標是像在c#中使用Linq一樣過濾源列表。在C++中可能有其他方法來做到這一點,但我需要了解如何使用算法。std :: binary_function使用的語法
我的函數適配器使用我的用戶自定義函數對象是
struct is_Selected_Source : public std::binary_function<SOURCE_DATA *, SOURCE_TYPE, bool>
{
bool operator()(SOURCE_DATA * test, SOURCE_TYPE ref)const
{
if (ref == SOURCE_All)
return true;
return test->Value == ref;
}
};
而在我的主程序,我使用如下 -
typedef std::list<SOURCE_DATA *> LIST;
LIST; *localList = new LIST;;
LIST* msg = GLOBAL_DATA->MessageList;
SOURCE_TYPE _filter_Msgs_Source = SOURCE_TYPE::SOURCE_All;
std::remove_copy(msg->begin(), msg->end(), localList->begin(),
std::bind1st(is_Selected_Source<SOURCE_DATA*, SOURCE_TYPE>(), _filter_Msgs_Source));
什麼,我發現了在Rad Studio 2010中出現以下錯誤。此錯誤表示「您的源文件使用了typedef符號,其中變量應出現在表達式中」。
「的typedef E2108使用不當‘is_Selected_Source’」
編輯 - 做VS2010中,它具有更好的編譯器診斷的詳細的實驗後,我發現這個問題是remove_copy的定義只允許uniary功能。我將這個功能改爲非法行爲並讓它起作用。
您的第一個答案解決了我的大部分問題,但是現在當我編譯時,我得到了 - E2034無法將'const SOURCE_TYPE'轉換爲'SOURCE_DATA *' – 2010-06-29 20:01:37
使用修改後的代碼和錯誤消息可能會更簡單。當使用單個線程解決一段時間內的幾個問題時,它可能會有點混亂:) – Cogwheel 2010-06-29 20:08:06
乍一看,聽起來好像你正在用錯誤的參數實例化binary_function。也許你正在傳遞指針類型作爲參數,當你只是傳遞基類型? (is_Selected_Source模板處理將其轉換爲指針) – Cogwheel 2010-06-29 20:09:36