アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは、ちょっと分かりにくい質問なんですが。

class c1
{
  int k1();

  class c2
  {
    int k2();
  };
};

と言うのがあったとします。
そこで、k2の関数の内部でk1を呼び出したいのですが、

int k2()
{
  return c1::k1();
}

見たいな事をすると、「静的でない関数の呼び出しが正しくありません」とエラーが出てしまい、コンパイルできません・・・

だからといってk1をc1の外に出してしまうとc1の変数にアクセスできなくなってしまうため、それはできません。

何かいい方法はないでしょうか・・・解決策をお待ちしていますm(_ _)m

A 回答 (1件)

クラスの設計がちょっと駄目です。


c2からc1::k1にアクセスしたいなら、
c2がc1のポインタを持つか、k1をstaticメンバにします。
ちなみにstaticメンバはCの関数と同じただの関数でメンバ変数にアクセスできません。
またこの場合c2を内包する意味がありません。
class c1
{
  int k1();
  int k2();
};
でいいのです。

return c1::k1();
これが何故だめか、ですが
c1は実体がありません。その為staticメンバ(静的な関数)である必要があるのです。

class c1
{
  static int k1();
  class c2
  {
    int k2();
  };
};
int c1::k1()
{
return 0;
}
int c1::c2::k2()
{
  return c1::k1();
}

一応これでコンパイルは通りますが。
    • good
    • 0
この回答へのお礼

そうだったんですか!!
できました^^ありがとうございましたm(_ _)m

お礼日時:2005/09/01 18:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!