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

相关问题