Чтобы свести ваш код к его основам:
std::vector<std::string> output;
FileSource(p, true, new HashFilter(hash, new HexEncoder(new StringSink(output))), true);
Crypto ++ StringSink
принимает ссылку на std::string
, а не std::vector<std::string>
. Также см. StringSink
в руководстве по Crypto ++.
FileSource
необходимо имя файла, а не имя каталога. Учитывая, что p
является итератором каталога, а не файловым итератором, я предполагаю, что у вас возникнут дополнительные проблемы, когда вы получите имя в виде C-строки или std::string
.
Вы должны использовать что-то вроде:
std::vector<std::string> output;
std::string str;
std::string fname = p...;
FileSource(fname.c_str(), true, new HashFilter(hash, new HexEncoder(new StringSink(str))), true);
output.push_back(str);
Понятия не имею, как получить имя файла из p
, то есть std::experimental::filesystem::recursive_directory_iterator
. Вот почему код просто говорит std::string fname = p...;
.
Вам следует задать еще один вопрос по поводу filesystem::recursive_directory_iterator
. Также смотрите Как вы рекурсивно просматриваете каждый файл / каталог в стандартном C ++?