Wenn ein .obj File überschrieben wurde, liegt das nicht daran, dass du zweimal den selben Namen für einen Include-Guard verwendet hast, sondern daran, dass du zwei Source-Files mit dem selben Namen verwendet hast.
Beides ist problematisch, aber der Grund ist ein anderer.
Bei Source-Files mit dem selben Namen nennt der Compiler das Objekt-File gleich, und nur das zuletzt compilierte "überlebt". Daher fehlen beim Linken dann Funktionen. -> Linkerfehler
Bei gleichen Include-Guard Namen kann es passieren, dass der Inhalt eines der beiden Header-Files nicht "mitcompiliert" wird, und der Compiler daher die Deklarationen in diesem Header-File nicht "sieht" wenn er ein Source File compiliert welches beide Header-Files inkludiert. Dem Compiler fehlen dann z.B. Klassen- oder Funktionsdeklarationen. -> Compilerfehler