互惠的朋友成员函数=循环包括声明

问题描述

| 我在不同的h文件中定义了两个类,每个类都有一些私有函数。但是,我希望每个类都可以从另一个类的函数访问一个函数。 例如...
//apple.h:

class Beets;

class Apple
{
public:
    double  ShadeUsed();
private:
    void    Fruit();
    bool    RedRoots();
    friend  bool Beets::BlueRoots(); //<--- Error b/c not declared yet
};


//beets.h
#include \"apple.h\"

class Beets
{
    public:
    double  SunNeeded();
private:
    void    Leaves();
    bool    BlueRoots();
    friend  bool Apple::RedRoots();
};
目标是每个类中只有一个函数可以访问其他类的私有内容。例如,只有root函数才有权访问其他类的私有内容。但是,如果没有包括在内,我将无法实现相互的友谊。 例如,我曾经考虑过让整个Beets类成为Apple的朋友,这样,类预声明就足够了,但是我宁愿只允许一个函数私有访问。 有什么建议么? 提前致谢, 马特 (P.S.为什么回车“ \ Thanksthanks \”,\“ Matt \”之间不会产生换行符?)     

解决方法

        您可以使用朋友函数来调用成员函数。
//apple.h:

class Beets;

class Apple
{
public:
    double  ShadeUsed();
private:
    void    Fruit();
    bool    RedRoots();
    friend  bool Beets_BlueRoots(Beets* beets); 
    friend  bool Apple_RedRoots(Apple* apple);
};

bool Apple_RedRoots(Apple* apple);


//beets.h

class Beets
{
    public:
    double  SunNeeded();
private:
    void    Leaves();
    bool    BlueRoots();
    friend  bool Apple_RedRoots();
    friend  bool Beets_BlueRoots(Beets* beets);
};

bool Beets_BlueRoots(Beets* beets);
    ,        您似乎遇到了一些设计问题。我建议继承:
class A{
public:
   virtual bool Roots();
}
class Apples : public A
{}
class Beets : public A
{}
现在,Apple和Beets都具有Roots功能,没有循环包含,并且它是公共的,因此它们可以互相访问(并且只有一个公共,所以您很安全)。您甚至不需要知道根是红色还是蓝色。而且,如果稍后再创建一个\“ Carrot \”类,则您的类也无需更改为也包含\“ OrangeRoots \”。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...