EDIT: just noticed you said it was C (C99, I presume). Assuming you don't want to say "struct Location" every time you refer to it, you can instead say:
I don't know how the compiler can see a multiple definition of the two structures. Both Location and Colour structures are members of different structures.
OK, I figured it out. It turns out that the GNU GCC compiler doesn't like the nested structures of Location and Colour in VertexOne and VertexTwo to be named the same. So I simply swapped the names with new ones and now GCC is happy.
It's C99 (most "pure C" out there is C89, so it's nice to qualify when talking about C99).
Anyway, your problem is that those nested structs are not confined in the outer struct's "namespace", because there are no namespaces in C. So you're redefining. If I may, it doesn't even make sense to define them inside a struct because they're not specific to that struct (at least Location and Colour).
Defines a struct named Colour (which must be referred to as "struct Colour") and then declares an object named Colour, of type struct Colour. Now, this: