CでもC++でも関数引数内で型の定義は出来ない。
あらゆるユーザ定義型とユーザ定義型へのポインタ、参照は
それを別の宣言、定義で使用するまえに宣言しておかなければならない。

struct Foo;
void foo(struct Foo *);

で足りるんだからそうしとけ。

K&RでもARMでもなんでもいいから宣言と定義の項を悟りをひらくまで
読み続け呂。