Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我们可以将一个文件中定义的静态函数访问到另一个文件吗?_C++ - Fatal编程技术网

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++编译器是通过将函数名与源文件名弄乱来实现的。”我认为您想到的是匿名名称空间。