在C ++中,如何与另一个类的静态函数成为朋友

ou

我想有两个类,A和B。类B中有一个静态函数,A希望将此函数作为朋友。

我的代码如下

A级

#ifndef A_H_
#define A_H_
#include "B.h"

static void B::staticFunction();

class A {
public:

    friend static void B::staticFunction();
    A();
    virtual ~A();
};

#endif /* A_H_ */

B级

#ifndef B_H_
#define B_H_
#include "A.h"

class B {
public:
    static void staticFunction();
    B();
    virtual ~B();
}; 

#endif /* B_H_ */

但是编译器告诉我:

无法声明成员函数'static void B :: staticFunction()'具有静态链接[-fpermissive]

在类外部声明“ static void B :: staticFunction()”不是定义[-fpermissive]

我该怎么做才能解决这些错误?在此先感谢您的帮助

编辑

谢谢大家,我终于想通了

工作代码是

class A;
class B{
public:
    static void staticFunction(A* a);
};

class A {
public:
friend void B::staticFunction(A* a);
    A();
    virtual ~A();
private:
    int i;
};
ha

最简单的示例如下所示:

struct A {
    static int doit();
};

class B {
    static int i;
    friend int A::doit();
};

int B::i = 0;

int A::doit()
{
    return ++B::i;
}

这里的顺序很重要:首先需要定义一个类,该类包含另一个类将成为朋友的静态函数。由于明显的原因,该函数的定义需要延迟,直到定义了两个类为止。

您可能希望查找c ++中的不同含义static,因为您将非成员函数static与内部链接混合在一起static

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C ++中,为什么不能使用另一个类的模板类型来与模板类成员函数成为朋友?

C ++如何在命名空间中调用另一个类的静态函数

如何从另一个C文件调用静态函数?

C ++:使函数成为多个类的朋友?

我如何从C ++中的静态线程入口点函数调用另一个函数?

类C ++的静态函数成员中的静态数据成员的初始化顺序

如何创建一个类,该类是C ++中另一个类的向量?

C#在另一个类的公共方法中找不到静态方法

我如何从C ++中的另一个函数循环一个函数

如何独立于 C++ 中声明的位置在另一个类函数中使用类?

如何在 C++ 中将另一个类引用到另一个类中?

稍后在 C++ 中的另一个类方法中调用类构造函数

c ++一个类可以包含一个与它成为朋友的类成员吗?

如何从 C# 中的另一个方法引用一个类?

c++ 类函数在另一个函数中无法按预期工作

C ++使用另一个类的函数

如何在c ++中将一个函数的数据成员访问到同一类中的另一个函数

C ++-从另一个类构造函数调用一个类构造函数

如何在C ++中的另一个模板函数中使用属于模板化类的嵌套类型?

C#如何在一个函数中创建类的实例,然后在另一个函数中使用相同的实例

在 C# 中从另一个类调用主窗体中的函数

目标 C:如何访问 AppDelegate 中另一个类中声明的类?

C ++如何将成员函数指针传递给另一个类?

从 C#/.NET MVC 应用程序中的另一个类调用函数

从私有void函数c#中的另一个类访问变量

在另一个类中调用成员函数c ++

另一个Form类中的C#访问函数

C ++中带有另一个模板类作为参数的构造函数

C ++从文件阅读器中的另一个类调用集合函数