2012-02-11 11 views
-2

あるファイルで定義された静的関数に別のファイルにアクセスできますか? 以下のコードでは、静的メソッドfun()を呼び出すことができません。なぜ私はそれにアクセスする別の方法はありませんか?あるファイルで定義された静的関数に別のファイルにアクセスできますか?

static void fun();// In abc.h 
static void fun(){cout<<"Hello."<<endl;} 

//xyz.cpp 
#include "abc.h" 
void main() 
{ 
    fun();// Why I am not able to call this static method? Is there any other way to 
      //Access this static function? 
} 
+0

この宿題はありますか? –

+1

あなたは関数に内部リンケージを与えているのですが、なぜそれを外部的に呼び出せないのでしょうか?これは本当の質問ですか? – ildjarn

+0

あなたの 'fun()' _defined_ヘッダファイルはありますか? – Lol4t0

答えて

4

static(フリー関数とグローバル変数)が機能するためです。これは、現在のコンパイル単位へのアクセスを制限することです。ほとんどのC/C++コンパイラは、関数名をソースファイル名でマングリングすることでこれを行います。

理論的には、実行時に実行可能ファイル内でマングリングされた関数を探し出し、関数呼び出しを強制するアセンブリブーストを行うこともできますが、これは脆く、プラットフォームに依存します。 - あなたはそれを実用に持ち込むことはできないだろうか。他の場所から呼び出す場合は、静的関数を宣言しないでください。

+3

で定義されています。*ほとんどのC/C++コンパイラは、関数名をソースファイル名でマングリングすることでこれを行います* "私はあなたが匿名の名前空間を考えていると思います。 – ildjarn

関連する問題