Передача 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 &);
Другие вопросы по тегам