无法超载<< 64位Linux上的运算符

时间:2014-06-18 14:56:32

标签: c++ linux qt 64-bit

我正在使用Qt进行开发,而strongHercul结构已将成员定义为uint64_t minuint64_t max(我只是不想使用quint64)。 在尝试重载时<<运营商如下。

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;
}

我收到了以下错误:

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;
             ^

没有真正明白错误是什么?我认为这可能导致我运行的64位系统导致此代码在32位Windows上顺利运行? 问题是如何在使用uint64_t时过载?

1 个答案:

答案 0 :(得分:3)

从它的外观来看,QDataStream没有uint64_t的重载。结果,输出操作符尝试转换为多个选项之一,即存在歧义,并且对于输入操作符,需要非const引用,并且没有匹配的运算符。您可能应该使用quint64unsigned long long int似乎是uint64_tunsigned long int是{{1}}。