通过模板类成员函数输出对象

时间:2011-03-22 02:26:08

标签: class templates operator-overloading friend

我正在尝试使用类模板indexedList的简单输出函数和一个简单类的对象。我已经将类中的输出操作符重载为友元函数,如下所示:

//in header file
friend ostream& operator <<(ostream&, simpleClass&);  

//in implementation file 
ostream& operator <<(ostream& out, simpleClass& c1){
out << c1.stringDataMem;            
return out;
}

它本身可以正常工作,但是当我尝试将它与类模板indexedList一起使用时,编译器会给出错误。这是类模板中的输出函数:

//in header file
void display() const;  

//in implementation file
void indexList<T, maxSize>::display() const{
for (int i = 0; i < size; i++)
    cout << elements[i] << endl;
}

在驱动程序中,我只是将simpleClass的一些对象附加到simpleClass indexedList的“elements”数组中,并尝试使用display()函数。这是我收到的唯一错误消息:

"IndexList.cpp", line 38: Error: Formal argument 2 of type simpleClass& in call
to_operator<<(std::basic_ostream<char, std::char_traits<char>>&, simpleClass&)
requires an lvalue.

类模板和简单类都可以自行运行,但组合它们不会。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

不熟悉'indexList',但由于display()是一个const方法,因此elements [i]可能会返回一个 const simpleClass&amp;,因此你试图删除const您对运营商的调用中的限定符&lt;&lt; ()。

尝试使用运算符&lt;&lt; ()采用const引用。