次のような構造体を定義すると問題が発生します
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に関しても同じです。
それで、私は何が欠けていますか?
よろしくお願いします。
アップデート
@Ashot が提供する解決策は、TInputData オブジェクトを手動で作成することです。ただし、メモリ管理の問題がいくつか追加されます。回避策は、スマート ポインターを使用することです。