ho provato a compilare questo codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct base{char *a;}tipo1;
int main(){
tipo1 no;
char *a;
no.a=(char *)malloc(5*sizeof(char));
a=no.a;
a[0]='v';
a[1]='a';
a[2]='d';
a[3]='o';
a[4]='\0';
int i=0;
while (a[i]!='\0'){
printf("%c", a[i]);
i++;}
scanf("%d", &i);
return 0;}

e mi è uscito come output "vado" come mi sarei aspettato...
ho provato con quest'altro:

#include <stdio.h>
#include <stdlib.h>
typedef struct base{char *a;}tipo1;
typedef struct nodo{base *x;}tipo2;
int main(){
tipo2 no;
char *a;
no->x.a=(char *)malloc(5*sizeof(char));
a=no->x.a;
a[0]='v';
a[1]='a';
a[2]='d';
a[3]='o';
a[4]='\0';
int i=0;
while (a[i]!='\0'){
printf("%c", a[i]);
i++;}
scanf("%d", &i);
return 0;}

e mi è uscito questo errore:
8 C:\Users\simone\Desktop\chiedi spiegazione.cpp base operand of "->" has non-pointer type "tipo2'"

Mi sapreste dire dov'è che sbaglio?