我有一个班级
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;操作
感谢。
答案 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