2

静的関数からメンバー関数を呼び出すことができないのはなぜだろう

#include <iostream>

class A{
public:
  A(){}
  ~A(){}
  static void astaticFunction(){
    printHello();
  }

private:
  void printHello(){
    std::cout << "Hello" << std::endl;
  }

};

int main(int argc, char **argv){
  A::astaticFunction();
  return 0;

}

コンパイラはこれを返しています

main.cpp: In static member function ‘static void A::astaticFunction()’:
main.cpp:8:16: error: cannot call member function ‘void A::printHello()’ without object

そして、どのように使用できますか?ありがとう

4

2 に答える 2

10

他の静的メンバー関数は、静的メンバー関数内からのみ呼び出すことができます。これは、非静的メンバー関数がオブジェクトの特定のインスタンスに関連付けられているためです。ここにはインスタンスがありません。

したがって、簡単な修正の 1 つはprintHello静的にすることです。

static void printHello(){
  std::cout << "Hello" << std::endl;
}

の特定のインスタンスで作業する必要がある 場合(実際のコードでは非静的データ メンバーを使用している可能性があるため)、そのインスタンスを作成する必要があります。次のようにできます。printHelloA

static void astaticFunction(){
  A a; // Create an A object
  a.printHello();
}
于 2013-03-28T16:51:03.157 に答える
0

sftrabbit が言ったように、静的メンバー関数から非静的メンバーにアクセスすることはできません。理由の説明として、非静的メンバー関数は、this (インスタンス ポインター) を暗黙的に渡す呼び出し規約を使用して呼び出されます。したがって、それらを呼び出すと、定義された引数とは別に、隠されたthis引数があります。

于 2013-03-28T16:59:28.813 に答える