2

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

1 回答 1

4

最简单的示例如下所示:

struct A {
    static int doit();
};

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

int B::i = 0;

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

这里的顺序很重要:您首先需要定义包含另一个类将成为朋友的静态函数的类。由于显而易见的原因,该函数的定义需要延迟到两个类都定义好之后。

您可能希望查找in c++的不同含义static,因为您将非成员函数static与 internal-linkage混合在一起static

于 2014-05-09T19:55:26.563 回答