4

カスタム クラスをシリアル化しようとしているときにエラーが発生しました。オブジェクトを読み書きするために、QDataStream 演算子 << および >> を使用しています。

ブール値を読み書きしようとすると、エラーが発生します。

error: ambiguous overload for 'operator<<' (operand types are 'QDataStream' and 'const bool')
QDataStream & operator << (QDataStream & out, const sys_settings & Value)
{
 out << Value.myBool
    << Value.someString;
 return out;
}
QDataStream & operator >> (QDataStream & in, sys_settings & Value)
{
 in >> Value.myBool;
 in >> Value.someString
 return in;
}
4

1 に答える 1

9

関連するヘッダーが含まれていない可能性が最も高いです。が含まれていない場合、問題を再現できますQDataStream

あなたのコメントによると、あなたのメンバーは非公開なので、あなたのクラスもストリームオペレーターと友達になる必要があります。

以下は正常にコンパイルされます。

#include <QString>
#include <QDataStream>

class C {
    // Everything here is private, the stream operator must be friends!
    bool b;
    QString s;
    C() : b(false) {}
    friend QDataStream & operator << (QDataStream & out, const C & val);
};

QDataStream & operator << (QDataStream & out, const C & val)
{
    out << val.b << val.s;
    return out;
}

struct Foo { int a; int b; };と同等であることに注意してくださいclass Foo { public: int a; int b; };。C++structは、デフォルトのアクセス指定子が public に設定された単純なクラスです。Aclassには、デフォルトのアクセス指定子がプライベートに設定されています。そうでなければ、違いはありません。

于 2013-09-06T12:04:56.277 に答える