Повторное построение из QTextStream
по причинам, на которые ответил @MatteoItalia , вызывает эту ошибку.
Фиксированный код выглядит следующим образом:
QFile file;
QString line;
int interationCount = 0;
file.setFileName(fileName);
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream stream(&file);
while(stream.readLineInto(&line))
{
std::count << "Line "<< interationCount << ": " << line << "\n";
interationCount++;
}
}
И выдает ожидаемый результат:
Line 0: 1
Line 1: 2
Line 2: 3
...
Line 34: 35
Дополнительная информация
Эта ошибка может показаться очевидной.Конечно, повторное конструирование объекта внутри цикла - плохая практика (как с точки зрения производительности, так и из-за ошибок, подобных этой), но в некоторых архитектурах это может быть не так очевидно.
Рассмотрим следующую архитектуру: родительский класс с именем FileFormat_Parrent
с виртуальными функциями для чтения одной строки файла, который должен быть перегружен, для этого можно использовать QTextStream
.
class FileFormat_Parrent
{
public:
QFile File;
void* Buffer
virtual bool ReadSingle() = 0;
virtual bool WriteSingle() = 0;
};
class FileFormat_Txt : public FileFormat_Parrent
{
virtual bool ReadSingle() {/*Possibly using QTextStream to do so*/}
virtual bool WriteSingle() {...}
};
class FileFormat_BinArray : public FileFormat_Parrent
{
...
};
Затем при использовании этих классов будет создан класс FileFormat
в соответствующем дочернем типе в зависимости от типа файла.
Эти созданные форматы файлов будут затем использоваться в цикле, повторяющемся между ReadSingle()
и WriteSingle()
до тех пор, пока один из них не вернет false.
Это приведет к появлению кода ошибки, поскольку QTextStream
многократно создается внутри цикла.