首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

一个输出操作符重载的有关问题

2012-10-19 
求助 一个输出操作符重载的问题直接上代码customer.hC/C++ code#ifndef _CUSTOMER_H#define _CUSTOMER_H#i

求助 一个输出操作符重载的问题
直接上代码 

customer.h

C/C++ code
#ifndef _CUSTOMER_H#define _CUSTOMER_H#include <QString>#include <QTextStream>#include <QObject>class Customer:public QObject{    Q_OBJECTpublic:    explicit Customer(const QString &name);    QString toString() const;        friend QTextStream& operator << (QTextStream &out, const Customer &c);};#endif


customer.cpp
C/C++ code
#include "customer.h"#include "customer.h"Customer::Customer(const QString &name){    setObjectName(name);}QString Customer:: toString() const{    QString retval =  QString("Student ") + objectName();    return retval;}QTextStream& Customer::operator << (QTextStream &out, const Customer &c){    out << c.toString() ;    return out;}


main.cpp

C/C++ code
#include <QApplication>#include <QList>#include <QDebug>#include "customer.h"int main(){    QObject root;    Customer *name1 = new Customer("a");    name1->setParent(&root);    Customer *name2 = new Customer("b");    name2->setParent(&root);    QObject *name3 = new QObject;    name3->setObjectName("c");    name3->setParent(&root);    QList<Customer *> list = root.findChildren<Customer*>();    foreach(const Customer *current ,list)    {        qDebug() << current->toString() << " ";    }    return 0;}



大家看头文件 我把输出操作符放类中友元访问 报错: 错误:C2039: “<<”: 不是“Customer”的成员 为什么会报错呢? 如果把这个函数去掉friend 放类外 实现文件去掉Customer:: 编译就通过 我记得在C++环境下输出操作符重载可以作为友元放在类中的。。。。 为什么会这样呢?

[解决办法]
QTextStream& Customer::operator << (QTextStream &out, const Customer &c)
{
out << c.toString() ;
return out;
}

啊~你的实现表示的是在Customer这类里的嘛。。。

热点排行