Veo que vas un poco liado. Vamos al principio (y entonces Dios separo la luz de las tinieblas y se hicieron las compañías eléctricas y vieron que aquello era bueno y obtenían beneficio...) No tan al principio... (Lo siento mucho, estudiar me sienta francamente mal (¡¡Españoles...!! (No tan francamente mal))) Ya. Stop.
Vamos a ver. Olvídate de los typedef. Cuando tu quieres crear un conjunto mixto de datos que están relacionados en una única entidad ¿qué haces? creas un struct (hasta aquí todo evidente).
La declaración del struct puedes hacerla de dos formas:
Código
struct nombre { }; //o de esta otra forma struct //y aqui ni hay nombre ni hay nada { };
Cuando quieres crear un tipo de dato, si declaras el struct de la primera manera, haces
Código
, y de la segunda forma no hay manera de declarar variables, ya que no tenemos forma de llamar al struct. Pues no, esto último es mentira. Es cierto que no podemos declarar variables de ese tipo de dato en cualquier parte del código, pero cuando creamos un struct anónimo podemos declarar una lista de variables justo entre la llave que cierra el cuerpo del struct y los dos puntos que indicar que ahí termina la definición del struct:
struct nombre variable;
Código
struct { }una_variable, otra_variable, ultima_variable_que_me_apetece_poner;
Estas serán las únicas variable de ese tipo de dato que puedas declarar y serán globales.
Ahora con el typedef la cosa cambia un poco. Podemos definir como al principio un struct con nombre y darle luego otra notación mas breve:
Código
Al igual que haciamos al declarar variables del struct anonimo, podemos definir una lista de alias entre la llave final y los dos puntos:
struct Original { char s[10]; }; typedef struct Original Original;
Código
Y podemos hacer lo mismo con un struct anónimo. En este último caso, lo que haya entre la última llave y el punto coma se considerará un alias, no una variable global del tipo del struct anónimo:
typedef struct Original { char s[10]; }Cosa,Culo,Melon; int main(int argc, char *argv[]) { Cosa cosa={"Cosa"}; Culo culo={"Culo"}; Melon melon={"Melon"}; cout << cosa.s << endl; cout << culo.s << endl; cout << melon.s << endl; return 0; }
Código
typedef struct { char s[10]; }Cosa,Culo,Melon; int main(int argc, char *argv[]) { Cosa cosa={"Cosa"}; Culo culo={"Culo"}; Melon melon={"Melon"}; cout << cosa.s << endl; cout << culo.s << endl; cout << melon.s << endl; return 0; }
Espero que te haya quedado claro.
¡Saludos!