Qt过载数据流运算符<<
Qt overload datastream 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
实现为:
#include "circle.h"
Circle::Circle(float radius, QVector2D centerPostion) :
radius(radius),
centerPostion(centerPostion) {}
QDataStream& operator <<(QDataStream& stream, const Circle& circle) {
return stream << circle.radius << circle.centerPostion;
}
如果我用它在以下主要:
#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(); }
...
RobbieEs评论后,我将代码更改为
#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
不幸的是,我仍然会遇到和以前一样的错误。
感谢Jaa-c和RobbieE的评论,我得到了它,最终我为两个流过载:
circ.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:
#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
相关文章:
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 如何显式调用运算符<<
- 为什么COUT在朋友函数中不起作用,该功能超载了操作员&lt;&lt;这是一个iStream运算符
- C++运算符<<调用::ostream而不是std::osttream
- BOOST ::变体无法解决运算符&lt;&lt;对于STD :: Ostream
- 过载输出<<用于类的运算符,以打印其中的元组
- C++ostream:没有运算符匹配<<&应在'&'代币
- 重载运算符<<:此运算符函数的参数太多
- C++继承运算符<<
- 重载运算符<<用于模板类.即使使用好友关键字也无法获得私人会员
- 如何过载<<用于YAML::Emitter的运算符,以序列化包含另一个自定义类的向量的自定义类
- 为什么字符串流运算符<<擦除原始值
- 关于使用运算符<<为新手提供C++中的模板
- 我已经完成了<<运算符重载,但它'It’不起作用
- 重载运算符<<输出地址而不是数据成员
- 错误:没有匹配'运算符<<"在'std::cout
- 重载运算符<<用于ostream语法
- 当运算符<存在时,为什么要定义 LT?
- log4cxx访问异常,使用<<运算符和宏
- 重载<<运算符错误C2804:二进制'运算符<<'参数太多