我一直在做这个学校作业。赋值告诉我们创建一个对象,使其输出操作符(<<<<<<<<<<< 这是我的代码:
#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()只返回数组的计数。
答案 0 :(得分:5)
CustomObject<int> co();
这是一个功能声明。省略括号。
std::cout << co();
为什么要将operator()
应用于co
?再次,省略括号。这应该有效:
CustomObject<int> co;
std::cout << co;
唉,从print方法构建和返回一个字符串几乎不是惯用的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;
}
答案 1 :(得分:1)
如果您希望能够打印临时对象,则应将参数设为const引用:
CustomObject const& q)