MrE*_*mar 1 c++ windows qt operator-overloading operators
我试着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();
}
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
no match for 'operator<<' in 'hash2 << a'
Run Code Online (Sandbox Code Playgroud)
我试图将运算符声明为类的成员,但也会出错.
error: 'MyCryptographicHash& MyCryptographicHash::operator<<(MyCryptographicHash&, const QString&)' must take exactly one argument
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
你的代码应该是
*hash2 << a;
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
这也有不泄漏记忆的优点.
但也许这比你发布的代码更多.