Qt 与操作员不匹配>>。。。用int?

Qt 与操作员不匹配>>。。。用int?,qt,operator-keyword,Qt,Operator Keyword,我正在重载操作符>>以从文件中读取一些类变量 我有一个奇怪的问题,显然,它适用于QString,QStringList,但不适用于int!我已经尝试将我的int声明为qint16,我收到了相同的错误消息 .h包含: enum Anyo { Primero, Segundo, Tercero, Cuarto, Quinto, Sexto, ANYOS }; class Asignatura { public: Asignatura(); Asignatura(const QStr

我正在重载
操作符>>
以从文件中读取一些类变量

我有一个奇怪的问题,显然,它适用于
QString
QStringList
,但不适用于
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;
};
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' 错误:与中的“operator>>”不匹配a.Asignatura::id' 错误:与中的“operator>>”不匹配a.Asignatura::anyo' 错误:与中的“operator>>”不匹配a.Asignatura::hsCatedra' 错误:与中的“operator>>”不匹配a.Asignatura::hsResueltas' 错误:与中的“operator>>”不匹配a.Asignatura::tieneProfe' 什么?您不知道如何读取
int
?或者是
bool
(基本上是
int
…)

我使用的是QDataStream::Qt_4_5(没有特殊原因),Qt 4.8.3


如上所述,我已经尝试将变量声明为qint16、qint8。没用。我缺少什么?

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

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

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

#include <QDataStream>
#包括

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

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

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

#include <QDataStream>
#包括

Sidenote:a
bool
不是
int
。这两个是C++中完全分离的类型。这两种类型之间存在隐式转换,但它们肯定不相同。
QDataStream
文档明确支持
qint*
类型,因此这很奇怪——可能您忘记了在重新编译测试之前保存更改或其他什么。是否需要将
#包括“name_of_header.h”
添加到
.cpp
文件中?不,它已经包括在内。是否将
包括在
.cpp
文件中?旁注:a
bool
不是
int
。这两个是C++中完全分离的类型。这两种类型之间存在隐式转换,但它们肯定不相同。
QDataStream
文档明确支持
qint*
类型,因此这很奇怪——可能您忘记了在重新编译测试之前保存更改或其他什么。您需要添加
#将“name_of_header.h”
包含到
.cpp
文件中吗?不,已经包含了。您是否将
包含在
.cpp
文件中?回答得很好。微妙的细节。谢谢你的教诲。当我得到15分时,我会投赞成票。现在,我不被允许。回答得很好。微妙的细节。谢谢你的教诲。当我得到15分时,我会投赞成票。现在,我是不被允许的。