The bad news is that I still get the same error message when the semicolon is removed.
Nice of you to share that message.
Whether the function needs to be defined before loop(), or after, depends on the function arguments. The IDE is able to define function prototypes for functions in the same .ino file that do no use references. The function prototypes are not always positioned correctly, though.
The function prototypes allow for forward references - calling a function that has not yet been defined - because the compiler knows what the function will look like.
Whether the use has to explicitly define/position the function prototype(s) depends on whether the function uses references and whether the sketch uses conditional compilation. Neither appears to be true in this case, but the undisclosed error message would have told us a lot.