无法将类的方法定义为另一个类的朋友

nod*_*dwj 0 c++ access-control friend

我正在尝试使MainScheduler的方法addJob成为Job类的友方函数,如下所示:

#include "MainScheduler.h"
//forward declaration
class MainScheduler;

class Job:
{
    friend void MainScheduler::addJob( Job* const job );
    ...
}
Run Code Online (Sandbox Code Playgroud)

但我一直在收到错误

错误C2027:使用未定义类型'MainScheduler'

你知道为什么我收到这条消息,我该如何解决?

asc*_*ler 5

您只能命名已声明的成员函数,即使是友情声明也是如此.这意味着必须定义类,而不仅仅是前向声明.

错误:

class X;

class Y
{
    friend void X::f(); // ERROR
};
Run Code Online (Sandbox Code Playgroud)

对:

class X
{
public:
    void f();
};

class Y
{
    friend void X::f();
};
Run Code Online (Sandbox Code Playgroud)

为什么你#include "MainScheduler.h"没有明确class MainScheduler可见的定义并不明显,所以那里还有其他奇怪的东西.

这条规则意味着它是不可能做这样的事情A::f()是朋友B和B::g()是朋友A,所以有时你不得不接受邀请好友一整类.(或者有一些奇特的方法可以使用帮助程序类来请求/授予某些函数集的权限,但是当您需要可扩展的库接口时,这会更有用.)