【问题标题】:How to overload operator <<如何重载运算符<<
【发布时间】:2013-04-20 07:20:40
【问题描述】:

我尝试在 Qt 中重载 operator &lt;&lt;

class MyCryptographicHash : public QCryptographicHash
{
public:
    MyCryptographicHash(Algorithm method);

    void addData(const QString &data );

    friend MyCryptographicHash& operator<< (MyCryptographicHash &obj, const QString &value);

private:
    QByteArray _data;
};

MyCryptographicHash& operator<<(MyCryptographicHash &obj, const QString &value) {
    obj.addData(value);
    return obj;
}


    MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    MyCryptographicHash *hash1 = new MyCryptographicHash(QCryptographicHash::Sha1);
    MyCryptographicHash *hash2 = new MyCryptographicHash(QCryptographicHash::Sha1);
    hash1->addData("abc1234");
    QString a;
    a = "qweer321";
    hash2<<a;
    qDebug() << "HASH1: " << hash1->result();
    qDebug() << "HASH2: " << hash2->result();
}

但我得到错误:

no match for 'operator<<' in 'hash2 << a'

我试图将操作符声明为类的成员,但也报错。

error: 'MyCryptographicHash& MyCryptographicHash::operator<<(MyCryptographicHash&, const QString&)' must take exactly one argument

我做错了什么?

【问题讨论】:

  • 非常感谢!我是新手 :)

标签: c++ windows qt operators operator-overloading


【解决方案1】:

你的代码应该是

*hash2 << a;

hash2 是一个指针,而不是一个对象。

但是在您发布的代码中,没有明显的原因为什么 hash2 是一个指针。所以你可以写

{
    MyCryptographicHash hash1(QCryptographicHash::Sha1);
    MyCryptographicHash hash2(QCryptographicHash::Sha1);
    hash1.addData("abc1234");
    QString a;
    a = "qweer321";
    hash2 << a;
    qDebug() << "HASH1: " << hash1.result();
    qDebug() << "HASH2: " << hash2.result();
}

这还具有不泄漏内存的优点。

但也许除了您发布的代码之外还有更多内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多