当我定义类似下面的结构时会出现问题
struct TInputData
{
QString filename;
QFile file;
QTextStream stream;
};
然后我将它放入QVector容器中,如下所示:
QVector<struct TInputData> input(DATA_SOURCE_END);
之后我调用了vector成员字段的一些方法:
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对象。但它引入了一些额外的内存管理困难。解决方法是使用智能指针。
答案 0 :(得分:2)
将QVector<struct TInputData> input(DATA_SOURCE_END);
更改为QVector<TInputData*> input(DATA_SOURCE_END);
QVector
需要复制其内容,但QFile
的复制构造函数是私有的,无法复制。
使用指针时,您应手动新建并删除TInputData对象,或者可以使用智能指针。
您可以尝试QSharedPointer
http://qt-project.org/doc/qt-4.8/qsharedpointer.html#QSharedPointer-2。
您的矢量将为QVector<QSharedPointer<TInputData> > input(DATA_SOURCE_END)