我一直在做这个学校任务。该任务告诉我们制作一个对象,该对象的输出操作符(< <)被重载。 这里是我的代码: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()只是返回数组的数量。
我认为他将函数调用操作,因为'co'是一个函数,编译器会抱怨,直到他添加了parens。当然,连接应该失败,因为'co'没有定义,只是一个声明。编译应该失败,因为正如@Bo指出的那样,'operator <<'带了一个非const引用,它不能绑定一个临时对象。那么究竟是什么实际的代码被测试是任何人的猜测。 – 2011-05-29 15:54:43
用于我的自定义类的构造方法的括号。或者,这不是调用我的对象的构造方法的正确方法? – Craimasjien 2011-05-29 17:24:25
很难确定问题出在工作代码上,它工作正常。 你能指出问题是什么吗?我仍然在创建我的对象时使用了括号,从我的调试器中可以看到它的构造函数。是否有一种“有效”的方式来做这样的事情,比如目标c? 而且,使用const标志在这里有什么实际用途,我知道它做了什么等等,但我认为我的代码逻辑将省去使用'const'的必要性:D 虽然感谢,现在魅力! – Craimasjien 2011-05-29 17:32:23