C++ 我们可以将一个文件中定义的静态函数访问到另一个文件吗?
我们可以将一个文件中定义的静态函数访问到另一个文件吗? 在下面的代码中,我无法调用静态方法C++ 我们可以将一个文件中定义的静态函数访问到另一个文件吗?,c++,C++,我们可以将一个文件中定义的静态函数访问到另一个文件吗? 在下面的代码中,我无法调用静态方法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 met
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?
}
static void fun();//在abc.h
static void fun(){cout,因为这就是static
(在自由函数和全局变量上)的工作方式。它应该做到这一点:限制对当前编译单元的访问。大多数C/C++编译器通过将函数名与源文件名弄乱来实现这一点
从理论上讲,您可以分解损坏,在运行时在可执行文件中定位损坏的函数,并执行一些汇编巫术来强制函数调用,但这将是脆弱的、依赖于平台的,并且是一个普遍的难题-我怀疑您能否将其用于实际用途。如果您想从els调用函数,请不要声明该函数为静态函数ewhere.因为这就是静态的如何工作(在自由函数和全局变量上)。它应该做到这一点:限制对当前编译单元的访问。大多数C/C++编译器通过将函数名与源文件名弄乱来实现这一点
从理论上讲,您可以分解损坏,在运行时在可执行文件中定位损坏的函数,并执行一些汇编巫术来强制函数调用,但这将是脆弱的、依赖于平台的,并且是一个普遍的难题-我怀疑您能否将其用于实际用途。如果您想从els调用函数,请不要声明该函数为静态函数ewhere.您可以传递函数指针(您的静态函数)并跨文件使用它。您可以传递函数指针(您的静态函数)并且跨文件使用。您正在给函数内部链接,然后想知道为什么不能在外部调用它?这是一个真正的问题吗?头文件中定义了fun()
吗?它对我来说很好(在修复main
返回int
之后)。您可以从不同的文件访问具有内部链接的函数,只要所有这些文件都是#include
d到同一个翻译单元中。fun()在abc.h中声明,在abc.cpp中定义。您正在给函数内部链接,然后想知道为什么不能从外部调用它?这是一个真正的问题吗?您的fun()是否
在头文件中定义?这对我来说很好(在修复main
返回int
之后)。只要所有这些文件都#包含在同一个翻译单元中,就可以从不同的文件访问具有内部链接的函数。fun()在abc.h中声明,在abc.cpp中定义“大多数C/C++编译器都是通过将函数名与源文件名弄乱来实现的。”我认为您想到的是匿名名称空间。“大多数C/C++编译器是通过将函数名与源文件名弄乱来实现的。”我认为您想到的是匿名名称空间。