如何使用没有 :: 的另一个类中的静态方法
How to use a static method from another class without ::
我是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
不是一个选项,则必须使用全局命名空间中可见的自由函数,而不是成员函数。
相关文章:
- C++从另一个类访问公共静态向量的正确方法是什么
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 检查哪个对象调用了另一个对象的对象方法
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 不能将方法返回的值用于另一个方法
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- Qt将信号与另一个类方法连接
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 如果两个静态库使用相同的另一个静态库,如何避免"LNK2005 Already Defined error"?
- 将一个类的方法指针存储到另一个类中
- 从另一个标头中的标头调用静态方法
- 如何启用使用另一个类的静态方法的模板函数的自动推导,从而消除冗长的调用方代码
- 如何使用没有 :: 的另一个类中的静态方法
- 对另一个静态库中静态库方法的未定义引用
- C++使用*this从静态方法调用一个抽象方法
- 试图将静态方法从1类转移到另一个类别
- 调用静态单一实例以调用另一个方法的方法
- 从另一个方法调用非静态成员方法
- 将非静态方法指针作为参数传递给另一个方法