Operator overload with template class
Hello people,
I didn't write any C++ code and became little rusty.
I cannot figure why the following code:
Code:
#include <iostream>
using namespace std;
template <typename T>
class Int
{
T x;
public:
Int(int);
Int(const Int<T>&);
Int<T>& operator =(const Int<T>&);
friend Int<T> operator +(const Int<T>&, const Int<T>&);
void show()
{
cout << x;
}
};
template <typename T>
Int<T>::Int(int t):x(t)
{
}
template <typename T>
Int<T>::Int(const Int<T>& ti)
{
x = ti.x;
}
template <typename T>
Int<T>& Int<T>::operator =(const Int<T>& ti)
{
if (this != &ti)
{
x = ti.x;
}
return *this;
}
template <typename T>
Int<T> operator +(const Int<T>& first, const Int<T>& second)
{
return Int<T>(first.x+second.x);
}
int main(int argc, char *argv[])
{
Int<int> a(4), b(5), c(0);
c = a+b;
c.show();
return 0;
}
generate linker error?
Can friend function be used when working with templates?
If I overload operator + as member function, everything works.
What would be explanation for such behavior?
Thanks