You need to do some more study and when posting for help it is a good idea to format code nicely.
Your Pay() function is currently passing arguments by value. To pass them by reference just do this:
Code
double Pay(int& HoursWorked, int& HourlyRate){
return CalcPay;}
double Pay(double& AnnualSalary) {
return CalcPay;}
Your function overloading is correct in the sense that you have multiple functions with the same name, in the same scope with different signatures.. Ignoring the fact you don't even call the function, you also don't even use the arguments in the function so it is pretty much pointless.
You aren't using prototypes, I think you would be referring to these lines:
Code
double Pay(int HoursWorked, int HourlyRate){
return CalcPay;}
double Pay(double AnnualSalary) {
return CalcPay;}
You're only defining the functions, there's no prototypes. Something like this would be probably what you need:
Code
// Prototypes
double Pay(int HoursWorked, int HourlyRate);
double Pay(double AnnualSalary);
// Definitions
double Pay(int HoursWorked, int HourlyRate){
return CalcPay;}
double Pay(double AnnualSalary) {
return CalcPay;}