this is a question that would probably create some real debate among long time c/c++ coders.
let's start with the most important answer:
in scenario 2, you do not have to use a forward declaration; putting one in won't hurt but won't "do" anything for you, technically speaking.
once you accept that, you can get to the more interesting debate about style.
the more modern stylistic approach in c/c++ these days, which i am a big fan of, is to have separate header (.h) files and .c/.cpp files for every source code file (and including the header at the top of the .c/.cpp file). in your header file you would then get into the habit of having forward declarations for EVERY function.
with this approach, you aren't using forward declarations only when you need them, but out of habit and style, so that you don't have to figure out when you need them and when you don't, and you don't have to worry about order of declaration.
many coders also like having the forward declarations as a kind of summary of the functions declared below (or in the .cpp file if we are using paired header-source code files).
now there are still cases when defining classes where you have to worry about forward declarations, and even worry about the order of declaring classes, but they tend to be few and far between when you get into the habit of always using .h vs .c/.cpp pairs.