Your prototype and your definition should always match EXACTLY, that is true for functions and everything else.
Since the point of the prototype is to tell the rest of the code exactly how the function, that is defined later, should be called, so it is meaningless if the definition does not meet the prototype in terms of number of arguments, their types and qualifiers, and the return type (and also the calling convention and any other function qualifiers).
two exceptions:
1. The parameter names in the prototype are not necessary or required to match the definition, but the types and number of argument must match exactly, including the return type.
2. If you have a default parameter value in the prototype, it should not appear in the definition.
there are a few other differences with function templates, but that will be a bit further down your learning process.
So for all that matters, PROTOTYPE == DEFINITION
so in the above code, the definition of displayPayment must be:
void displayPayment (double monthPay, double& whateverVariableNameHERE)
{ .. } to match its prototype.
PS: please put your code between tags, for readability.