Shuhei Kagawa

クラスの前方宣言

Jul 28, 2009 - C++

1 時間ほどハマりました。下のようなコードで A::foo のところでコンパイルエラーです。

C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません

enum GREETING { HELLO, NI_HAO, CIAO };

class A {
public:
  GREETING foo(B* b);  // コンパイルエラー!
}

class B {
public:
  void bar(A* a);
}

B は下でしっかり宣言しているのに型がないと言われるので、enum の使い方が違うのかと思いいろいろ調べていたのですが・・・。class A の宣言の前に B の前方宣言が必要なんですね。

class B;

class A {
  // ...
}

一回勉強したのですが、すっかり忘れていました。この辺は勝手に上手くやってくれる Java や C# のありがたみを感じます。