QTextStream的操作数到二进制的转换无效

Invalid Operands to Binary Conversion for QTextStream

本文关键字:转换 无效 二进制 操作数 QTextStream      更新时间:2023-10-16

我需要了解QTextStream到bool变量的转换。看看我的代码:

QFile file(SOME FILENAME);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) qDebug() << "FILE COULD NOT BE OPENED";
QTextStream stream(&file);
bool dBm = false;
if (!stream.atEnd()) stream >> dbM;

由于我上面的表达是抛出错误,我需要帮助。

QTextStreambool没有现成的>>运算符。

医生。QTextStream中提到了许多输入运算符,但对于bool:没有

QTextStream;运算符>>(QChar&c(
QTextStream;运算符>>(char&c(
QTextStream;运算符>>(short&i(
QTextStream;运算符>>(无符号短&i(
QTextStream&运算符>>(int&i(
QTextStream;运算符>>(unsigned int&i(
QTextStream;运算符>>(long&i(
QTextStream;运算符>>(无符号长&i(
QTextStream&运算符>>(qlonglong&i(
QTextStream;运算符>>(qulonglong&i(
QTextStream;运算符>>(float&f(
QTextStream;运算符>>(double&f(
QTextStream;运算符>>(QString&str(
QTextStream&操作符>>(QByteArray&array(
QTextStream&操作员>>(char*c(

然而,为个人快乐添加一个并不那么复杂。

最复杂的是@Frank Osterfeld在这条评论中已经提到的内容–以定义CCD_ 5和CCD_。

对于我的MCVE,我只使用了01

testQTextStreamInputBool.cc:

#include <QDebug>
#include <QTextStream>
// a stream input operator for bool
QTextStream& operator>>(QTextStream &in, bool &var)
{
char value;
in >> value;
var = value == '1';
return in;
}
int main()
{
QTextStream in(stdin);
while (!in.atEnd()) {
bool value; in >> value;
qDebug() << "Read:" << (value ? "true" : "false");
}
}

testQTextStreamInputBool.pro:

SOURCES = testQTextStreamInputBool.cc
QT = core

在cygwin64:的bash中编译和测试

$ qmake-qt5 testQTextStreamInputBool.pro
$ make
g++ -c -fno-keep-inline-dllexport -D_GNU_SOURCE -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB -I. -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtCore -I. -I/usr/lib/qt5/mkspecs/cygwin-g++ -o testQTextStreamInputBool.o testQTextStreamInputBool.cc
g++  -o testQTextStreamInputBool.exe testQTextStreamInputBool.o   -lQt5Core -lpthread 
$ echo "0110010" | ./testQTextStreamInputBool
Read: false
Read: true
Read: true
Read: false
Read: false
Read: true
Read: false
$

当然,也可以重载operator<<(QTextStream&, bool),以便为自定义输入提供匹配的自定义输出。

否则,编译器将隐式地将bool转换为int,并使用QTextStream::operator<<(int)。因此,false将被写入为0true将被写入1

这正是我的重载bool流输入运算符所期望的。。。