C++ Qt重载数据流运算符<&书信电报;
在阅读了本文之后,我编写了下面的代码来重载我编写的这个头的位移位C++ Qt重载数据流运算符<&书信电报;,c++,qt,C++,Qt,在阅读了本文之后,我编写了下面的代码来重载我编写的这个头的位移位 #ifndef CIRCLE_H #define CIRCLE_H #include <QVector2D> #include <QDataStream> class Circle { public: Circle(const float radius, const QVector2D centerPostion); friend QDataStream& operator &
#ifndef CIRCLE_H
#define CIRCLE_H
#include <QVector2D>
#include <QDataStream>
class Circle
{
public:
Circle(const float radius, const QVector2D centerPostion);
friend QDataStream& operator <<(QDataStream& stream, const Circle& circle);
private:
float radius;
QVector2D centerPostion;
};
#endif // CIRCLE_H
#如果是圆#
#定义圆
#包括
#包括
班级圈子
{
公众:
圆(常量浮动半径、常量QVector2D中心位置);
friend QDataStream&operator多亏了Jaa-c和RobbieE的评论,我得到了它,最后我对这两个流都超载了:
circle.cpp:
#include "circle.h"
Circle::Circle(float radius, QVector2D centerPostion) :
radius(radius),
centerPostion(centerPostion) {}
QDebug operator<<(QDebug stream, const Circle &circle) {
stream << "Circle[radius = "
<< circle.radius
<< ", centerPosition = ["
<< circle.centerPostion.x()
<< ", "
<< circle.centerPostion.y()
<< "]]";
return stream;
}
#包括“circle.h”
圆::圆(浮动半径,QVector2D中心位置):
半径(半径),
中心位置(中心位置){}
QDebug运算符根据,函数签名应该不同。这会产生相同的错误,并且它不允许我写入其他流,例如qInfo().QDebug
与QDataStream
@RobbieE不一样。这没有多大帮助,我应该使用QDebug
而不是QDataStream
?还是我做错了什么?如果你想同时使用QDebug
和QDataStream
,你也需要重载QDebug
的流操作符,它们是不兼容的独立类。好了@Jaa-c,我道歉!
#include "Circle.h"
#include <QDebug>
int main(int argc, char *argv[])
{
Circle circle = Circle(2, QVector2D(3, 5));
qDebug() << circle;
}
19:27:38: Running steps for project untitled...
19:27:38: Configuration unchanged, skipping qmake step.
19:27:38: Starting: "/usr/bin/make"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -mmacosx-version-min=10.7 -Wall -W -fPIC -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../untitled -I. -I../../Qt/5.5/clang_64/lib/QtWidgets.framework/Headers -I../../Qt/5.5/clang_64/lib/QtGui.framework/Headers -I../../Qt/5.5/clang_64/lib/QtCore.framework/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -I../../Qt/5.5/clang_64/mkspecs/macx-clang -F/Users/laura/Qt/5.5/clang_64/lib -o main.o ../untitled/main.cpp
../untitled/main.cpp:10:14: error: invalid operands to binary expression ('QDebug' and 'Circle')
qDebug() << circle;
~~~~~~~~ ^ ~~~~~~
../../Qt/5.5/clang_64/lib/QtCore.framework/Headers/qdebug.h:129:20: note: candidate function not viable: no known conversion from 'Circle' to 'const void *' for 1st argument; take the address of the argument with &
inline QDebug &operator<<(const void * t) { stream->ts << t; return maybeSpace(); }
...
#include "circle.h"
Circle::Circle(float radius, QVector2D centerPostion) :
radius(radius),
centerPostion(centerPostion) {}
QDebug operator<<(QDebug dbg, const Circle &c) {
QDebugStateSaver saver(dbg);
dbg.nospace() << "Hoi!";
return dbg;
}
#ifndef CIRCLE_H
#define CIRCLE_H
#include <QVector2D>
#include <QD>
class Circle
{
public:
Circle(const float radius, const QVector2D centerPostion);
friend QDebug operator<<(QDebug dbg, const Coordinate &c);
private:
float radius;
QVector2D centerPostion;
};
#endif // CIRCLE_H
#include "circle.h"
Circle::Circle(float radius, QVector2D centerPostion) :
radius(radius),
centerPostion(centerPostion) {}
QDebug operator<<(QDebug stream, const Circle &circle) {
stream << "Circle[radius = "
<< circle.radius
<< ", centerPosition = ["
<< circle.centerPostion.x()
<< ", "
<< circle.centerPostion.y()
<< "]]";
return stream;
}
#ifndef CIRCLE_H
#define CIRCLE_H
#include <QVector2D>
#include <QDebug>
#include <QDataStream>
class Circle
{
public:
Circle(const float radius, const QVector2D centerPostion);
friend QDebug operator<<(QDebug stream, const Circle &circle);
private:
float radius;
QVector2D centerPostion;
};
#endif // CIRCLE_H