C++输出运算符重载

bme*_*ter 0 c++ generics overloading

我一直在做这个学校作业.赋值告诉我们创建一个让它的输出运算符(<<)重载的对象.这是我的代码:

#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;
        }
}
Run Code Online (Sandbox Code Playgroud)

所以我像这样实例化这个对象:

CustomObject<int> co();
Run Code Online (Sandbox Code Playgroud)

并调用其输出方法:

std::cout << co();
Run Code Online (Sandbox Code Playgroud)

哪个将不可避免地调用print方法,并将字符串返回到默认输出流.

但是,我的控制台/调试器中没有可见的输出.

我在这里错过了什么?

PS这不是完整的类,它是通用的,因为其他几种方法和功能无需在此处显示.

PPS num_items()和队列变量是所述休息的一部分,这个类是PriorityQueue对象.因此,queue是指定类型的数组(因此是泛型声明),num_items()只返回数组的计数.

fre*_*low 5

CustomObject<int> co();
Run Code Online (Sandbox Code Playgroud)

这是一个功能声明.省略括号.

std::cout << co();
Run Code Online (Sandbox Code Playgroud)

你为什么要operator()申请co?再次,省略括号.这应该工作:

CustomObject<int> co;
std::cout << co;
Run Code Online (Sandbox Code Playgroud)

唉,从打印方法构建和返回一个字符串几乎不是惯用的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;
}
Run Code Online (Sandbox Code Playgroud)