若手社員のKDさんが、外部から入手したプログラムのソースを整理する仕事をしていた。整理の方向性としては、「グローバル変数とスタティック変数(Cで言うところの)をクラス化する」。クラス化すると言ってもCなので使うのはstructなのだが。
 作業途中で解決できない問題が出たという話。「struct宣言どおしの関係がうまくいかなくてコンパイルエラーが出る」だという。
 なので、以下のコードを提示した。
struct ABC;   ←※
struct XYZ
{
//  struct ABC abc;  ← これはNG
//  実体を入れようとするとまだABCの全容が
//   コンパイラにとってわからないのでエラー
    struct ABC *abcptr;  // ポインタはOK
};
struct ABC
{
  struct XYZ xyz; //  ここは実体OK。
};
 KDさん曰く、このコードを参考にしたら、問題が解決し仕事が進んだとのこと。めでたし。
 この構造?の呼び名が、前方参照、前方宣言、後方参照・・・だったか、わからなくなっていた。
 この記事を書くにあたり、ネットで調べてみると上記※印のところを「不完全宣言」いう表現もあるようだ。この言い方もちょっと物騒でビックリな感じもするが、前だか後ろだかというような相対的な表現よりいいかな。