Поток вывода в файл нельзя передать неявно, поскольку не задан режим передачи по умолчанию

Нужно написать функцию, которая принимает контейнер и поток файла, и выводит, соответсвенно, данные из контейнера в этот файл. Код следующий:

template<template<typename _T, class alloc = std::allocator<_T>> class container>
inline void FileManager::outputResult(container<int> cont, std::ofstream& outStream)
{
    try {
        if (!outStream.is_open()) {
            throw std::runtime_error("File is not opened!");
        }

        std::for_each(cont.begin(), cont.end(), [](int elem) {
            outStream << std::to_string(elem) << " "; });
    }
    catch (std::runtime_error ex) {
        std::cout << ex.what() << std::endl;
    }
}

Выдает ошибку: error C3493: "outStream" нельзя передать неявно, поскольку не задан режим передачи по умолчанию Как исправить эту ситуацию?


Ответы (1 шт):

Автор решения: AR Hovsepyan
  • Исключение генерируется для того, чтобы вызывающая функция обрабатывала его как ей удобно. Обрабатывая его на месте, вы делаете генерацию исключения бессмысленной(разве что для демонстрации знаний имеет только смысл).

Очень много лишнего, можно проще:

template<template<typename> class container>
inline void FileManager::outputResult(container<int> cont, std::ofstream& outStream)
{
   if (!outStream.is_open()) 
      throw std::runtime_error("File is not opened!");
   for(const int elem : cont)
       outStream << std::to_string(elem) << " ";     
}

И зачем нужно тут строковое представление, если вы его передаете в поток? Проще outStream << elem << " ";

→ Ссылка