C-структуры живут в другом пространстве имен и должны быть явно определены, таким образом:
struct p {
int a;
int b;
struct p * next;
};
И не забывайте точку с запятой в конце! : -)
Вы можете притворяться, что вы в C ++, таким образом: typedef struct p { /*...*/ } p;
. Но я думаю, что next
все равно будет объявлено, как указано выше.