Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Merovingean
3 / 3 / 0
Регистрация: 14.12.2013
Сообщений: 67
#1

Хранение ссылок на файловые потоки - C++

10.07.2015, 18:30. Просмотров 240. Ответов 4
Метки нет (Все метки)

Добрый вечер.

Столкнулся с ошибкой C2280 - невозможность использовать конструктор копирования для ifstream.

Пытаюсь заполнить приоритетную очередь парами вида <std::string, std::ifstream&>, но при добавлении в очередь нового элемента возникает ошибка (строка 12). Не могу понять, почему, ведь в контейнер должна помещаться ссылка, а не объект.

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    std::vector<std::ifstream> fileStreams;
 
    using UUIDAndStream = std::pair<std::string, std::ifstream&>;
    using UUIDContainer = std::vector<UUIDAndStream>;
    std::priority_queue<UUIDAndStream, UUIDContainer, UUIDComparator> UUIDQueue;
 
    std::string UUIDbuf;
 
    for (auto &stream : fileStreams)
    {
        stream >> UUIDbuf;
        UUIDQueue.push(std::make_pair(UUIDbuf, stream));
    }


Подскажите, пожалуйста, как можно выкрутиться из данной ситуации?
Пытался использовать std::reference_wrapper, но ничего хорошего не вышло.

Добавлено через 13 часов 33 минуты
Ну, конечно, есть более простой вариант с хранением в очереди индекса потока в векторе fileStreams. Но, может быть, есть более умный путь.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2015, 18:30     Хранение ссылок на файловые потоки
Посмотрите здесь:

C++ Файловые потоки и функции
Бинарные файловые потоки C++
C++ Файловые потоки
Файловые потоки C++
C++ Бинарные файловые потоки
C++ Файловые потоки
файловые и строчные потоки (комментарии) C++
C++ Файловые потоки данных
файловые потоки C++
Файловые указатели. Потоки C++
Файловые потоки C++
C++ Файловые потоки в Си и С++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4879 / 3015 / 370
Регистрация: 10.11.2010
Сообщений: 11,075
Записей в блоге: 10
Завершенные тесты: 1
10.07.2015, 21:12     Хранение ссылок на файловые потоки #2
Почему не использовать указатель вместо ссылки?
Nick Alte
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 1
10.07.2015, 21:30     Хранение ссылок на файловые потоки #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ох, опасное это дело, хранить указатели на элементы вектора. Одна реаллокация - и бум!
К ссылкам, кстати, это тоже относится.
P.S. Для любителей риска: загвоздка в вызове make_pair. Надо было использовать std::ref на stream или вызывать конструктор pair явно.
Merovingean
3 / 3 / 0
Регистрация: 14.12.2013
Сообщений: 67
11.07.2015, 17:20  [ТС]     Хранение ссылок на файловые потоки #4
Спасибо. Думаю, тогда лучше остановиться на индексах. Так безопаснее.
castaway
Эксперт С++
4879 / 3015 / 370
Регистрация: 10.11.2010
Сообщений: 11,075
Записей в блоге: 10
Завершенные тесты: 1
11.07.2015, 17:56     Хранение ссылок на файловые потоки #5
Цитата Сообщение от Merovingean Посмотреть сообщение
Спасибо. Думаю, тогда лучше остановиться на индексах. Так безопаснее.
Думаю стоит пересмотреть алгоритм. Более чем уверен что можно сделать проще.
Yandex
Объявления
11.07.2015, 17:56     Хранение ссылок на файловые потоки
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru