A declaration says "Such a thing exists." It doesn't matter how many times you say this, so long as you're consistent about the interface. (C++ doesn't even require that, since it allows function overloading.)

A definition says "This is what it is." If you say that multiple times, the linker will shrug in confusion about which one is really what it is.