2005-12 / 2005-12-08

前のエントリ: 構造体のパディングをつめる [c]
次のエントリ: 今日の戦利品 [ぬいぐるみ]

(C++)メンバ関数のポインタでエラー
2005-12-08-2 / カテゴリ: [programming][c] / [permlink]

Visual C++にて
class Hoge {
:
  int foobar();
:
};
なメンバ関数に対し、クラス内の別メソッドで
*func = &this->foobar;
とすると
error C2276: '&' : 仮想関数のアドレスを取ろうとしました。
となってしまう。

このあたりによると、
staticメンバ関数か(C-likeな)グローバル関数でないと駄目です。
理由は、「関数のアドレスが決定できない」です。
なんだって。

オブジェクトが生成されるまでメンバ関数はメモリ上のどこにあるかわからない(というかない?)ってことかな。

とりあえずクラスの定義で
class Hoge {
:
  static int foobar();
:
とすれば OK になった。
実際の関数の定義は
int Hoge::foobar() {
:
:
}
で、static は要らない。(というか、つけるとエラーになる)
前のエントリ: 構造体のパディングをつめる [c]
次のエントリ: 今日の戦利品 [ぬいぐるみ]

2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2013-05-02 16:12