std :: vector for_each ошибка C3867 вызов функции отсутствует список аргументов

0

Я хочу использовать синтаксис for_each с std::vector<std::string> но я продолжаю получать следующую ошибку:

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, сделайте эту функцию глобальной функцией, и все должно работать.
Теги:
foreach
boost
stdvector

2 ответа

3
Лучший ответ

Предполагая, что вы checkFilePath чтобы checkFilePath был членом, замените его использование в алгоритме for_each с помощью:

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

и он зафиксирует this и вызовет метод. Для этого требуется С++ 11, которого у вас может не быть. Если у вас есть С++ 03, вам нужно либо использовать std::bind либо boost::bind или написать собственный функтор, чтобы захватить this или состояние, необходимое для решения проблемы checkFilePath.

Если ваш checkFilePath не зависит от состояния this, просто сделайте метод static и ваш существующий код должен компилироваться. (В качестве альтернативы, сделайте его свободной функцией).

1

Функция checkFilePath - это нестатическая функция-член. Его можно вызывать с использованием объекта типа IO. Поэтому вы не можете просто указать его как третий параметр алгоритма for_each. Было бы проще, если бы эта функция была бы статической функцией-членом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню