Die Kurzfassung:
struct ist C++
typedef struct ist C
In C muss man Strukturvariablen gleich bei der Deklaration der Struktur definieren.
Dann ist der typ der Strukturvariablen allerdings "Weg", also du kannst ihn nicht mehr ansprechen (die Strukturvariablen und ihre Member aber schon!)
Wenn du dir das struct erhalten willst, musst du es in einem typedef einfangen:
In C++ ist ein struct genau das gleiche wie eine Klasse
(allerdings mit anderen default - zugriffsbeschränkungen).
Das heißt du kannst das Struct als Typ, und auch ohne Typedef deklarieren:
Allerdings ist die C Syntax natürlich auch in C++ erlaubt.
So war es FRÜHER. HEUTE ist es vollkommen egal wie du structs deklarierst, soweit ich weiß darf man auch in C (nach C99) structs nach belieben deklarieren. Oder so ähnlich...
Kurz: Bleib für C bei typedef struct, und für C++ bei nur struct
Haters gonna hate, potatoes gonna potate.