【问题标题】:QT: Error Overloading the "<<" operator in QdatastreamQT:重载 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

为什么会这样?显然 >> 运算符似乎超载了我只得到

谢谢。

【问题讨论】:

    标签: qt qt4


    【解决方案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;”的方法
    猜你喜欢
    • 2018-02-22
    • 2014-07-04
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多