I'm trying to overload <<
and >>
operators in my Array
class. I do it this way:
template<class T>
ostream& operator<<(ostream& out, const Array<T>& a) {
for (int i = 0; i < a.m_size; i++) {
out << a.m_data[i] << " ";
}
out << endl;
return out;
}
template<class T>
istream& operator>>(istream& in, Array<T>& a)
{
cout << "Enter n: ";
in >> a.m_size;
a.m_data = new T[a.m_size];
for (int i = 0; i < a.m_size; i++)
{
cout << "Enter a[" << i << "] = ";
in >> a.m_data[i];
}
return in;
}
Is my implementation right? My main()
didn't run when I call cout << array
or cin >> array
This is class Array
:
template<class T>
class Array {
private:
int m_size;
T* m_data;
public:
friend ostream& operator<<(ostream& out, const Array<T>& a);
friend istream& operator>>(istream& in, Array<T>& a);
};
My main()
function:
int main()
{
Array<int> b;
cin >> b;
cout << b;
}
Error message:
Error:LNK2019
Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class Array<int> &)" (??5@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$Array@H@@@Z) referenced in function _main