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