我想有两个类,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;
}
这里的顺序很重要:首先需要定义一个类,该类包含另一个类将成为朋友的静态函数。由于明显的原因,该函数的定义需要延迟,直到定义了两个类为止。
您可能希望查找c ++中的不同含义static
,因为您将非成员函数static
与内部链接混合在一起static
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句