如何使用没有 :: 的另一个类中的静态方法

How to use a static method from another class without ::

本文关键字:静态方法 另一个 何使用      更新时间:2023-10-16

我是C++新手,作为程序的要求,我必须使用预先编写的主文件。在该文件中,调用另一个类的方法,就像在主文件中定义该方法一样。下面显示了此代码的示例。

主.cpp

#include <iostream>
#include "foo.h"
int main()
{
   cout << factorial(5);
   return 0;
}

福.H

#ifndef FOO_H
#define FOO_H
class Foo
{
public:
    static int factorial(int);
}
#endif

傅.cpp

#include foo.h
int foo::factorial(int n)
{
    if (n == 0)
        return 1;
    else
        return n * factorial(n - 1);
}

生成的错误是:

'factorial': identifier not found

如果我用 cout <<foo::factorial(5( 替换 cout <<factorial(5(,那么程序就可以完美运行。

但是,提供的 main 调用 foo,就好像它是在 main 中定义的一样.cpp如第一个代码块所示。

我找到的所有关于类似主题的帖子都只是"如何调用另一个类的方法"答案:静态方法。但即使使用静态方法,也必须使用 foo::factorial(int( 对吗?如何在 main.cpp 中调用阶乘(int(?

在C++中,不需要单独的包含文件(在本例中为 "foo.h" (映射到名为 Foo 的类。包含的文件可以将函数factorial声明为自由函数,并在foo.cpp中定义它。

foo.hpp

#ifndef FOO_H
#define FOO_H
int factorial(int);
#endif

傅.cpp

#include "foo.h"
int factorial(int n)
{
    if (n == 0)
        return 1;
    else
        return n * factorial(n - 1);
}

如何在没有 :的情况下使用来自另一个类的静态方法 ::

在这种情况下,你不能。在某些情况下,这可能适用于参数相关查找。ADL 在这里不适用,因为参数是文字

如何在main.cpp中调用阶乘(int(?

使用范围解析运算符 :: .

您希望在没有范围解析的情况下调用,并且希望使用静态成员函数,这是冲突的。你必须选择一个愿望,然后放弃它。如果修改main.cpp不是一个选项,则必须使用全局命名空间中可见的自由函数,而不是成员函数。