Shuhei Kagawa

クラスの前方宣言

@2009-07-28 19:44

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;

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