Reputation: 15
I'm trying to use a simple output function of the class template indexedList with an object of a simple class. I've overloaded the output operator in the class as a friend function as follows:
//in header file
friend ostream& operator <<(ostream&, simpleClass&);
//in implementation file
ostream& operator <<(ostream& out, simpleClass& c1){
out << c1.stringDataMem;
return out;
}
It works fine on its own, but when I try to use it with the class template indexedList the compiler gives an error. Here is the output function in the class template:
//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;
}
In the driver, I simply append a few objects of simpleClass into the "elements" array of a simpleClass indexedList, and try to use the display() function. This is the only error message I get:
"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.
Both the class template and the simple class work well on their own but combining them does not. Any help would be greatly appreciated!
Upvotes: 1
Views: 44
Reputation: 1088
Not familiar with 'indexList', but as display() is a const method, elements[i] is likely returning a const simpleClass &, and thus you're trying to drop the const qualifier in your call to operator << ().
Try having operator << () take a const reference.
Upvotes: 1