c++ - 如何重载运算符 <<

标签 c++ windows qt operators operator-overloading

我尝试重载 operator <<在 Qt 中。

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

我做错了什么?

最佳答案

你的代码应该是

*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();
}

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

但也许这不仅仅是您发布的代码。

关于c++ - 如何重载运算符 <<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16117818/

相关文章:

python - PySide2 拖放功能不起作用

c++ - 'QObject::QObject' 无法访问在类 'QObject' 中声明的私有(private)成员

c++ - C++中哪些情况会用到clone,如何使用?

c++ - 视觉 C++ : No default constructor

c++ - 将 objective-c 文件添加到 firebreath 时出错。无法从 C++ 调用 obj-c

java - 需要在一台计算机上使用多个 IP 来测试聊天应用程序

c++ - 如何使用cerial序列化

c++ - 如何使用 C++ 复制几个具有不同扩展名的文件

windows - SSH Windows 到 UNIX

android - 如何在 Qt/Android 的默认外部编辑器中打开文件