我正在重载operator >>
以从文件中读取一些类'变量。
我有这个奇怪的问题,显然,它适用于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;
};
.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。没工作。我错过了什么?
答案 0 :(得分:6)
QDataStream
类在您包含的其中一个Qt头文件中向前声明。因此,您可以在类定义中使用QDataStream
类型作为参考,而不会收到错误。
但是,尝试对类的实例执行任何操作(例如访问operator >>
)将导致错误,因为该定义不可用。
要解决此问题,只需在#include
文件的顶部添加以下.cpp
:
#include <QDataStream>