QT:错误重载“<<<” Qdatastream中的运算符

时间:2012-02-13 07:52:20

标签: qt qt4

我有一个班级

class budget
{
    float transportation, grocery, food, stationery;
    QString key;
public:
//input output functions here.

};

我创建了一个QHash>和<<我的班级的操作员。

QDataStream &operator <<(QDataStream &stream, budget &myclass)
{
    stream<<myclass.getFood();
    stream<<myclass.getGrocery();
    stream<<myclass.getKey();
    stream<<myclass.getStatn();
    stream<<myclass.getTransport();

    return stream;
}

QDataStream &operator >>(QDataStream &stream, budget &myclass)
{
    float f;
    QString s;
    stream>>f;
    myclass.addFood(f);
    stream>>f;
    myclass.addGrocery(f);
    stream>>s;
    myclass.addDate(s);
    stream>>f;
    myclass.addStatn(f);
    stream>>f;
    myclass.addTransport(f);

    return stream;
}

但即使是现在我仍然会收到错误:

  

C:\用户\ KARTHIK \ QT \ Mendrive-集结模拟器Simulator_Qt_for_MinGW_4_4__Qt_SDK__Debug ........ \ QTSDK \模拟器\ Qt的\ mingw的\包括\ QtCore \ qdatastream.h:381:   错误:'运营商&lt;&lt;'不匹配在   'operator&lt;&lt;(((QDataStream&amp;)((QDataStream *)out)),((const   QString&amp;)((const QString *)it.QHash :: const_iterator :: key with   Key = QString,T =预算)))&lt;&lt; it.QHash :: const_iterator :: value with Key = QString,T = budget'

为什么会这样?显然&gt;&gt;运算符似乎重载我只得到&lt;&lt;&lt;&lt;&lt;&lt;操作

感谢。

1 个答案:

答案 0 :(得分:3)

错误源于函数签名的声明。更改您的声明:

QDataStream &operator <<(QDataStream &stream, budget &myclass);
QDataStream &operator >>(QDataStream &stream, budget &myclass);

为:

QDataStream &operator <<(QDataStream &stream, const budget &myclass);
QDataStream &operator >>(QDataStream &stream, budget &myclass);

同样的问题描述了here

抱歉,我错过了一件事。方法也必须声明为朋友。所以我试过了,这是工作结果;

class budget
{
  float transportation, grocery, food, stationery;
  QString key;
public:
  budget() {}

friend QDataStream &operator <<(QDataStream &stream, const budget &myclass) {

      stream<< myclass.food;
      stream<< myclass.grocery;
      stream<< myclass.key;
      stream<< myclass.stationery;
      stream<< myclass.transportation;

    return stream;

}
friend QDataStream &operator >>(QDataStream &stream, budget &myclass) {

    stream >> myclass.food;
    stream >> myclass.grocery;
    stream >> myclass.key;
    stream >> myclass.stationery;
    stream >> myclass.transportation;
    return stream;

}

<强>更新

要回答有关朋友功能的问题,请允许我指出已有的答案here