不匹配运营商>> ...用int?

时间:2013-05-15 21:59:51

标签: qt operator-keyword

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

我有这个奇怪的问题,显然,它适用于QStringQStringList,但不适用于int!我已尝试将int声明为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;
}

我收到的错误是:

error: no match for 'operator>>' in 'in >> a.Asignatura::id'
error: no match for 'operator>>' in 'in >> a.Asignatura::anyo'
error: no match for 'operator>>' in 'in >> a.Asignatura::hsCatedra'
error: no match for 'operator>>' in 'in >> a.Asignatura::hsResueltas'
error: no match for 'operator>>' in 'in >> a.Asignatura::tieneProfe'

什么?您不知道如何阅读int?或bool(基本上是int ...)?

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

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

1 个答案:

答案 0 :(得分:6)

QDataStream类在您包含的其中一个Qt头文件中向前声明。因此,您可以在类定义中使用QDataStream类型作为参考,而不会收到错误。

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

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

#include <QDataStream>