ifstream
не имеет конструктора копирования.A(std::ifstream input)
означает «конструктор для A
, принимающий ifstream
значением ».Это требует, чтобы компилятор сделал копию потока для передачи конструктору, чего он не может сделать, потому что такой операции не существует.
Вам необходимо передать поток по ссылке (что означает «использовать то же самое»).объект потока, а не его копия. ") Поэтому измените сигнатуру конструктора на A(std::ifstream& input)
.Обратите внимание на амперсанд, что означает «ссылка», а в случае параметров функции означает «передать этот параметр по ссылке вместо по значению .
Стилистическое примечание: Тело вашего цикла while
, A(input);
, создает структуру типа A
, которая затем почти сразу же разрушается при цикле while
. Вы уверены, что этоэто то, что вы хотите сделать? Если этот код завершен, то более разумно было бы сделать это функцией или функцией-членом A
, которая построена вне цикла:
static void process(std::istream& stream)
{
// some actions
// note stream is declared as std::istream&; this lets you pass
// streams that are *not* file-based, if you need to
}
int main()
{
std::ifstream input("somefile.xxx");
while (input.good())
{
process(input);
}
return 0;
}
ИЛИ
struct A
{
A()
{
// default constructor for struct A
}
void process(std::istream& stream)
{
// some actions
}
};
int main()
{
std::ifstream input("somefile.xxx");
A something;
while (input.good())
{
something.process(input);
}
return 0;
}