2014-01-30 49 views
0

我想用for_each語法與std::vector<std::string>但我不斷收到以下錯誤:的std ::向量的for_each錯誤C3867函數調用缺少參數列表

Error 1 error C3867: 'IO::checkFilePath': 

function call missing argument list; use '&IO::checkFilePath' to create a pointer to member 

這裏是我的代碼:

void checkFilePath(const std::string& filepath); 
void checkFileList(const std::vector<std::string>& filelist); 

void IO::checkFilePath(const std::string& filepath) 
{ 
    if (!boost::filesystem::exists(filepath) || !boost::filesystem::is_directory(filepath)) 
    { 
     //do smth 
    } 

} 

void IO::checkFileList(const std::vector<std::string>& filelist) 
{ 
     std::for_each(filelist.begin(), filelist.end(), checkFilePath); 
} 
+0

它看起來'checkFilePath'是一個成員函數,你不能直接將它與for_each一起使用,使該函數成爲一個全局函數,一切都應該工作。 – Raxvan

回答

3

假定你打算爲checkFilePath成爲會員,以替換for_each算法使用它:

[&](std::string const& s){return checkFilePath(s);} 

,它會捕捉this並調用該方法。以上要求C++ 11,你可能沒有。如果您有C++ 03,則必須使用std::bindboost::bind或編寫您自己的函數捕獲this或解決checkFilePath問題所需的狀態。

如果您的checkFilePath不依賴於this的狀態,只需將方法static與您現有的代碼進行編譯即可。 (或者,使其成爲免費功能)。

1

函數checkFilePath是一個非靜態成員函數。可以使用IO類型的對象調用它。所以你可能不會簡單地將它指定爲for_each算法的第三個參數。 如果這個函數是一個靜態成員函數,會更簡單。

相關問題