0

我正在重载operator >>以从文件中读取一些类的变量。

我有这个奇怪的问题,显然,它适用于QString, QStringList,但不适用于int! 我已经尝试将我的声明int为 as qint16,并且收到相同的错误消息。

.h包含:

enum Anyo { Primero, Segundo, Tercero, Cuarto, Quinto, Sexto, ANYOS };

class Asignatura
{
public:
    Asignatura();
    Asignatura(const QString & nom, Anyo a, int hsCat);
    friend QDataStream& operator<<(QDataStream &out, const Asignatura &a);
    friend QDataStream& operator>>(QDataStream &in, Asignatura &a);
    ...

private:
    static int idGeneral;
    int id;
    QString nombre;
    QString nombreProfe;
    Anyo anyo;
    int hsCatedra;
    int hsResueltas;
    bool tieneProfe;
};

.cpp包含:

QDataStream& operator >>(QDataStream &in, Asignatura &a)
{
    in >> a.id;
    in >> a.nombre;
    in >> a.nombreProfe;
    in >> a.anyo;
    in >> a.hsCatedra;
    in >> a.hsResueltas;
    in >> a.tieneProfe;
    return in;
}

我收到的错误是:

错误:'in >> a.Asignatura::id' 中的 'operator>>' 不匹配
错误:'in >> a.Asignatura::anyo' 中的 'operator>>' 不匹配
错误:'in >> a.Asignatura::hsCatedra' 中的 'operator>>' 不匹配
错误:'in >> a.Asignatura::hsResueltas' 中的 'operator>>' 不匹配
错误:'in >> a.Asignatura::tieneProfe' 中的 'operator>>' 不匹配

什么?你不知道怎么读int?还是一个bool(基本上是一个int......)?

我正在使用 QDataStream::Qt_4_5 (无特殊原因),Qt 4.8.3。

正如我上面所说,我已经尝试将变量声明为 qint16、qint8。没用。我错过了什么?

4

1 回答 1

6

该类QDataStream在您包含的 Qt 头文件之一中前向声明。因此,您可以将QDataStream类型用作类定义中的引用而不会收到错误。

但是,尝试对类的实例执行任何操作(例如访问operator >>)将导致错误,因为定义不可用。

#include要解决此问题,只需在文件顶部添加以下内容.cpp

#include <QDataStream>
于 2013-05-15T22:56:33.190 回答