metoinside
metoinside

Reputation: 44

Can't Overload << Operator on 64-bit Linux

I am developing with Qt and strongHercul struct has members defined as uint64_t min and uint64_t max (I just don't want to use quint64 for this). While trying to overload << operator as below.

QDataStream &operator<<(QDataStream &ds, const strongHercul& hercul)
{
    ds << hercul.min << hercul.max;
    return ds;
}
QDataStream &operator>>(QDataStream &ds, strongHercul& hercul)
{
    ds >> hercul.min >> hercul.max;
    return ds;
}

I got following error:

error: ambiguous overload for 'operator<<' 
(operand types are 'QDataStream' and 'const uint64_t {aka const long unsigned int}')
     data_stream << hercul.min << hercul.max;
                 ^
error: no match for 'operator>>' 
(operand types are 'QDataStream' and 'uint64_t {aka long unsigned int}')
 data_stream >> hercul.min >> hercul.max;
             ^

Didn't really understand what's wrong? I assume that might cause 64-bit system that I'm running cause this code works smoothly on 32-bit Windows? The question is how to overload while using uint64_t?

Upvotes: 1

Views: 2117

Answers (1)

Dietmar K&#252;hl
Dietmar K&#252;hl

Reputation: 153840

From the looks of it, QDataStream doesn't have overloads for uint64_t. As a result the output operator tries to convert to one of multiple choices, i.e., there is an ambiguity and for the input operator a non-const reference is required and there is no matching operator. You should probably travel in terms of quint64 which seems to be a unsigned long long int while it seems uint64_t is a unsigned long int.

Upvotes: 4

Related Questions