You're not properly linking in overload.cpp. Make sure that overload.cpp is party of your project file in both cases.
The error undefined symbol is a linker error. It means that when you are linking all your code into a single executable / library, the linker is not able to find the definition of the function. The main two reasons for that are forgetting to include the compiled object in the library/executable or an error while defining the function (say that you declare void f( int & );
but you implement void f( const int & ) {}
).
I don't know your IDEs (I have never really understood Xcode) but you can try to compile from the command line: g++ -o exe input1.cpp input2.cpp input3.cpp ...
If overload is a template class, the source for the operator must occur in the header.
In addition, the names must be fully qualified. That is, if you have any namespace/class static members, they must have the full definition applied to them when defining the member's implementation.
You have not added the files to your project correctly so the compiler is not building it and the linker is not linking it in.
The reason I can tell is that you have posted invalid code that will not compile. Had you added it to your project, the compiler would have failed and you would never have gotten to the linking step.
In Visual Studio, you can add an existing file to your project in the Project
menu under Add Existing Item...