gpt4 book ai didi

c++ - QFile 类嵌套的问题

转载 作者:行者123 更新时间:2023-11-30 04:14:15 25 4
gpt4 key购买 nike

当我定义如下结构时出现问题

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 对象。但它引入了一些额外的内存管理困难。解决方法是使用智能指针。

最佳答案

更改 QVector<struct TInputData> input(DATA_SOURCE_END);QVector<TInputData*> input(DATA_SOURCE_END);

QVector需要复制其内容,但复制 QFile 的构造函数是私有(private)的,不能复制。

当使用指针时,您应该手动新建和删除 TInputData 对象,或者您可以为它使用智能指针。

你可以试试QSharedPointer http://qt-project.org/doc/qt-4.8/qsharedpointer.html#QSharedPointer-2 .您的 vector 将是 QVector<QSharedPointer<TInputData> > input(DATA_SOURCE_END)

关于c++ - QFile 类嵌套的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18997395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com