Проблема возникает, когда я определения структуры вроде следующего одногопроблема с QFile класса вложенности
struct TInputData
{
QString filename;
QFile file;
QTextStream stream;
};
Затем я положил это в QVector контейнер следующим образом:
QVector<struct TInputData> input(DATA_SOURCE_END);
после этого я призываю некоторые методы полей векторных членов:
for(int i = 0; i < DATA_SOURCE_END; ++i)
{
input[i].filename = QString(argv[i + 1]);
input[i].file.setFileName(input[i].filename);
if (!input[i].file.open(QIODevice::ReadOnly))
{
QDebug(QtCriticalMsg) << "Failed to open input file: " << input[i].filename << "!!!";
return a.exec();
}
input[i].stream.setDevice(&input[i].file);
qDebug() << "Connected to input file " << input[i].filename;
}
Я получаю следующую ошибку компиляции:
/usr/include/qt4/QtCore/qfile.h:209: error: 'QFile::QFile(const QFile&)' is private
within this context <at line where struct TInputData is declared>
И то же самое касается QTextStream.
Так что мне не хватает?
Заранее за вашу помощь.
UPDATE
Предлагаемое решение по @Ashot позволяет вручную создавать объекты TInputData. Но это вводит некоторые дополнительные трудности управления памятью. Обходной путь - использование интеллектуальных указателей.
Это означает, что объекты 'QFile' не могут быть скопированы, что, очевидно, затрудняет их перенос в вектор. Вы можете использовать указатели, если вы готовы управлять памятью. Самый простой ответ - какой-то умный указатель. – john
спасибо, я постараюсь сыграть с указателем 'TInputData'. – niebelung