C ++输出运算符重载

问题描述

| 我一直在从事这项学校作业。作业告诉我们要使一个对象的输出运算符(<<)重载。 这是我的代码:
#include <ostream>
using namespace std;

template <class T>
class CustomObject {

        string print() {
            string text = \"\";
            for (int i = 0; i < num_items(); i++) {
                text += queue[i];
                text += \" | \\n\";
            }
            return text;
        }

        friend std::ostream& operator <<(std::ostream &output,CustomObject &q) {
            output << \"\" << q.print();
            return output;
        }
}
所以我实例化了这个对象:
CustomObject<int> co();
并调用其输出方法:
std::cout << co();
这将不可避免地调用print方法,并将字符串返回到默认输出流。 但是,我的控制台/调试器中没有可见的输出。 我在这里想念什么? PS这不是完整的类,它是通用的,因为这里没有必要显示其他几种方法和功能。 PPS num_items()和队列变量是其余部分的一部分,该类是PriorityQueue对象。因此,queue是指定类型的数组(因此为通用声明),并且num_items()仅返回该数组的计数。     

解决方法

        
CustomObject<int> co();
那是一个函数声明。省略括号。
std::cout << co();
你为什么要
operator()
co
?同样,省去括号。这应该工作:
CustomObject<int> co;
std::cout << co;
las,从打印方法构造和返回字符串几乎不是惯用的C ++。这是我会做的:
template <typename T>
class CustomObject
{
    // ...

public:

    void print(std::ostream& os) const
    {
        for (int i = 0; i != num_items(); ++i)
        {
            os << queue[i] << \" | \\n\";
        }
    }
};

std::ostream& operator<<(std::ostream& os,const CustomObject& object)
{
    object.print(os);
    return os;
}
    ,        如果希望能够很好地打印临时对象,则应将参数设为const引用:
CustomObject const& q)
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...