QT:重载 Qdatastream 中的“<<”运算符时出错
Posted
技术标签:
【中文标题】QT:重载 Qdatastream 中的“<<”运算符时出错【英文标题】:QT: Error Overloading the "<<" operator in Qdatastream 【发布时间】:2012-02-13 07:52:20 【问题描述】:我有课
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:\Users\Karthik\QT\Mendrive-build-simulator-Simulator_Qt_for_MinGW_4_4__Qt_SDK__Debug........\QtSDK\Simulator\Qt\mingw\include\QtCore\qdatastream.h:381: 错误:'operator
为什么会这样?显然 >> 运算符似乎超载了我只得到
谢谢。
【问题讨论】:
【参考方案1】:错误源于函数签名的声明。更改您的声明:
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
【讨论】:
我一开始就尝试了上面的解决方案,但是导致了 5 个表单错误:C:\Users\Karthik\QT\Mendrive-build-simulator-Simulator_Qt_for_MinGW_4_4__Qt_SDK__Debug\..\Mendrive\fileoverload.h:11: error: passing 'const budget' as 'this' argument of 'float budget::**getFood()**' discards qualifiers
其中 getFood() 被其他成员函数替换。这就是为什么我尝试删除 const
是的,因为函数必须返回 const 值。
是的!将其声明为友元函数做到了!你能否解释一下,它是如何产生影响的?我仍然不明白为什么它不能作为非朋友功能工作。非常感谢!
你真的应该学习如何使用'const',在某个地方查找教程并阅读它。也许这 parashift.com/c++-faq-lite/const-correctness.html 。改变你的“浮动预算::getFood();” “浮动预算::getFood() const;”的方法以上是关于QT:重载 Qdatastream 中的“<<”运算符时出错的主要内容,如果未能解决你的问题,请参考以下文章
请教QDatastream与QVariant的相关问题(QT编程)
qt中QVector<QTextBlock>如何转入QDataStream?
Qt笔记——QFile,QDataStream,QTextStream