0

QHashに傾倒し、QHashをDataStreamにシリアル化しているときに、次のコードでエラーが発生しました。

typedef QHash <quint32,QString> hashtype1;
typedef QHash <QLocale::Language,hashtype1> hashtype;

hashtype1 hash;
hash.insert(1, "Key1");
hash.insert(2, "Key2");

hashtype hash1;
hash1.insert(QLocale::English, hash);
hash1.insert(QLocale::French, hash);

QByteArray ba;
QByteArray ba1;
QDataStream ds(&ba, QIODevice::ReadWrite);
QDataStream ds1(&ba1, QIODevice::ReadWrite);
ds << hash;
ds1 << hash1;

qDebug() << ds.device()->readAll();
ds.device()->reset();
ds1.device()->reset();

hashtype1 hashcopy;
ds >> hashcopy;

hashtype hash1copy;
ds1 >> hash1copy;

最後のステートメントは、/ usr / include / qt4 / QtCore / qdatastream.h:362というエラーを示しています。エラー:「>>k」の「演算子>>」に一致しません</p>

私はこれを修正することができません..私は何か間違ったことをしていますか?どうすればこれを修正できますか?

4

1 に答える 1

1

問題は、のQDataStream演算子がないことですQLocale::Language。ストリーミングする場合、整数型に自動的に変換されるため、これは機能します。ストリーミングインではこれを行うことはできません。したがってQHash、キーに別のテンプレートパラメータを使用するように変更するか、ストリーミング演算子を作成するQLocale::Language必要があります(これは些細なことですが、intとの間でキャストする必要があります)。

于 2012-08-03T13:40:25.507 に答える