2013-09-06 4 views
4

У меня возникла ошибка при попытке сериализации моего пользовательского класса. Я использую оператор QDataStream < < и >>, чтобы написать и прочитать мой объект.Qt serialization boolean с 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; 
} 

ответ

7

Вы, скорее всего, не включая соответствующие заголовки. Я могу воспроизвести вашу проблему, если QDataStream не включен.

Поскольку ваши члены, в соответствии с вашими комментариями, являются частными, ваш класс также должен подружиться с оператором потока.

Следующая компилирует OK:

#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; };. A C++ struct - это просто класс со спецификатором доступа по умолчанию, установленным для общего доступа. A class имеет спецификатор доступа по умолчанию, заданный как закрытый. В противном случае нет никакой разницы.