This is my code:
mov.h
#include <iostream> template< class T> class Movie { public: Movie(T in) { a = in; } friend std::ostream& operator<<(std::ostream& os, const Movie<T>& movie); private: T a; }; template<class T> std::ostream& operator<<(std::ostream& os, const Movie<T>& movie) { return os; }
main.cpp
#include "mov.h" int main() { Movie<int> movie1(1); std::cout << movie1 << std::endl; return 0; }
I try to compile this code and I get an error message:
Error 1 error LNK2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Movie<int> const &)" ( [email protected] [email protected] [email protected] @ [email protected] @@ [email protected] @ [email protected] [email protected] @@@Z) referenced in function _main c:\Users\Adi\documents\visual studio 2013\Projects\bdika01\bdika01\main.obj bdika01 Error 2 error LNK1120: 1 unresolved externals c:\users\adi\documents\visual studio 2013\Projects\bdika01\Debug\bdika01.exe 1 1 bdika01
If I try inline code like this, ok:
mov.h
#include <iostream> template<class T> class Movie { public: Movie(T in) { a = in; } friend std::ostream& operator<<(std::ostream& os, const Movie<T>& movie){ return os; } private: T a; };
What if I want to separate the protection and the announcement?
Thanks.
source share