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# のありがたみを感じます。

基本クラスのメンバを初期化できない

Jul 28, 2009 - C++

またまた少しはまりました。

C++ のコンストラクタは、基本クラスのメンバを初期化できないそうです。 以下のように書くとエラーになります。

class A {
protected:
  int foo;
};

class B : public A {
public:
  B(int value) : foo(value) {
  }
};

親クラスのコンストラクタでも初期化をしていると、子クラスのコンストラクタで初期化しても上書きされてしまうからでしょうか。なかなか面倒なものですね。

参考サイト:

XCode でリファクタリングがしたい

Jul 27, 2009 - iPhone 開発

ということで、iPhone 開発を再開してみようかと思います。動機が極めて不純ですが・・・。

最近、会社で C++ コードをいじっていて、C 言語的なもろもろに慣れてきました。家でも C 言語的なものを触りつつ TDD とかもしてみたいと思って Xcode を開いたところ、なんと C++ ではリファクタリング機能がきかないとのこと。しかし Xcode の見た目は好きなので Xcode を使いたい。ということで、Objective-C を再開することにしました。

以前触ったときは、アプリを公開する事なくうやむやになってしまったので、今度こそ何か公開できればいいなと思っています。