2012-02-11 102 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

這是功課嗎? – 2012-02-11 13:43:04

+1

你正在給函數內部聯繫,然後想知道爲什麼你不能在外部調用它?這是一個真正的問題嗎? – ildjarn 2012-02-11 13:44:20

+0

你的'fun()'_defined_在頭文件中嗎? – Lol4t0 2012-02-11 13:44:53

回答

4

因爲這就是static(在自由函數和全局變量上)的工作原理。它應該這樣做:限制對當前編譯單元的訪問。大多數C/C++編譯器通過使用源文件名來修改函數名來完成此操作。從理論上講,你可以分解mangling,在運行時定位可執行文件中的mangled函數,並執行一些程序集巫術來強制進行函數調用,但這會變得很脆弱,取決於平臺,並且會造成一般疼痛 - 我懷疑你可以把它帶到實際使用。如果你想從其他地方調用它,就不要聲明靜態函數。

+3

「*大多數C/C++編譯器通過使用源文件名來修改函數名來完成此操作。」我認爲您正在考慮匿名命名空間。 – ildjarn 2012-02-11 13:50:19

相關問題