Передача ifstream в качестве аргумента в конструктор классов
Я пытаюсь передать: ifstream infile;
в моем main () для конструктора класса с именем "FIFO": FIFO (infile);
В заголовочном файле FIFO (FIFO.h) у меня есть:
FIFO (std::ifstream);
std::ifstream infile;
И в FIFO.cc у меня есть:
FIFO::FIFO (std::ifstream & INFILE)
{
infile = INFILE;
}
Я продолжал получать (Есть их больше, я просто вставляю один из них):
В файле, включенном в /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/localefwd.h:43, из /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/string:45, из FIFO.cc:7: /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h: в функции-члене 'std::basic_ios >& std::basic_ios >::operator=(const std::basic_ios >&) ': /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../ include / C++/4.4.7/bits/ios_base.h:793: ошибка: 'std::ios_base& std::ios_base::operator=(const std::ios_base&)' является частной / usr / lib / gcc / x86_64- redhat-linux / 4.4.7 /../../../../ include / C++/4.4.7/iosfwd:47: ошибка: в этом контексте
Я не уверен, работает ли передача ifstream, используя ссылку, или нет, или это моя проблема с кодами.
Спасибо!
2 ответа
В вашей декларации конструкторов вы берете std::ifstream
по значению вместо ссылки. Вместо
FIFO (std::ifstream);
так должно быть
FIFO (std::ifstream&);
и вы храните переменную-член 'infile' по значению, а не по ссылке.
std::ifstream infile;
должно быть
std::ifstream& infile;
Поскольку теперь вы храните ссылку на ifstream, вам нужно инициализировать ее в списке инициализаторов, а не назначать ее в конструкторе.
FIFO::FIFO (std::ifstream & INFILE)
: infile(INFILE)
{
}
Это потому, что конструктор копирования std::ifstream
является частным (или удален в C++11). Сохраняя переменную-член по значению, вы пытаетесь сделать копию std::ifstream
Объект передан в конструктор.
Подписи вашего объявления и реализации прототипа не совпадают. + Изменить
FIFO (std::ifstream);
в
FIFO (std::ifstream &);