[ACCEPTED]-C++ template/ostream operator question-ostream
Accepted answer
Please look at the error, it says,
friend 4 declaration 'std::ostream& operator<<(std::ostream&, const Vector&)' declares 3 a non-template function|
That means you need to make 2 the operator<<
a template function.
So in the class, you've 1 to declare it as:
template<unsigned short m> //<----note this: i.e make it template!
friend std::ostream& operator <<(std::ostream& out, const Vector<m>& v);
Then define it as,
template <unsigned short m>
std::ostream& operator<<(std::ostream& out, const Vector<m>& v) {
out << "(" << v.coords[1] << " - " << v.coords[2] << ")";
return out;
}
Just define the friend function inside the 2 class.
template <unsigned short n>
class Vector
{
public:
std::vector<float> coords;
Vector();
Vector(std::vector<float> crds);
friend std::ostream& operator <<(std::ostream& out, const Vector& v)
{
out << "(" << v.coords[1] << " - " << v.coords[2] << ")";
return out;
}
};
template <unsigned short n>
Vector<n>::Vector()
{
coords.assign(n, 0.0);
}
int main()
{
Vector<3> toomas;
cout << toomas;
}
Tested: http://ideone.com/LDAR4
Or, declare the template function 1 beforehand, using a forward prototype:
template <unsigned short n>
class Vector;
template <unsigned short n>
std::ostream& operator <<(std::ostream& out, const Vector<n>& v);
template <unsigned short n>
class Vector
{
public:
std::vector<float> coords;
Vector();
Vector(std::vector<float> crds);
friend std::ostream& operator << <>(std::ostream& out, const Vector& v);
};
template <unsigned short n>
Vector<n>::Vector()
{
coords.assign(n, 0.0);
}
template <unsigned short n>
std::ostream& operator <<(std::ostream& out, const Vector<n>& v)
{
out << "(" << v.coords[1] << " - " << v.coords[2] << ")";
return out;
}
Tested: http://ideone.com/8eTeq
Source:
stackoverflow.com
More Related questions
Cookie Warning
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.