gpt4 book ai didi

c++ - 在 C++ 中,如何与另一个类的静态函数成为 friend

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:38 24 4
gpt4 key购买 nike

我想有两个类,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;
};

最佳答案

最简单的例子是这样的:

struct A {
static int doit();
};

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

int B::i = 0;

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

这里的顺序很重要:您首先需要定义包含其他类友好的静态函数的类。出于显而易见的原因,该函数的定义需要延迟到两个类都定义完毕。

不妨查查the different meanings of static in c++ ,因为您将非成员函数 static 与内部链接 static 混合在一起。

关于c++ - 在 C++ 中,如何与另一个类的静态函数成为 friend ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23572680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com