C++ C+中的友元成员函数+;-远期申报不起作用

C++ C+中的友元成员函数+;-远期申报不起作用,c++,friend,circular-dependency,friend-function,C++,Friend,Circular Dependency,Friend Function,我现在的情况与中描述的类似 然而,在我的例子中,类B需要知道类A,因为它正在使用它,所以该线程中给出的解决方案对我不起作用。我还试图给函数本身一个前向声明,但效果不太好。似乎每个类都需要另一个类的完整定义 有什么简单的方法可以解决吗?我更喜欢一个不涉及新类的解决方案,新类封装了一个旧类 代码示例: //A.h class B; //not helping void B::fB(); //not helping class A { public: friend void B::fB();

我现在的情况与中描述的类似

然而,在我的例子中,类B需要知道类A,因为它正在使用它,所以该线程中给出的解决方案对我不起作用。我还试图给函数本身一个前向声明,但效果不太好。似乎每个类都需要另一个类的完整定义

有什么简单的方法可以解决吗?我更喜欢一个不涉及新类的解决方案,新类封装了一个旧类

代码示例:

//A.h
class B; //not helping
void B::fB(); //not helping

class A
{
public:
    friend void B::fB();
    void fA(){};
protected:
    void fA_protected(){};
};

//B.h
#include "A.h"

class B
{
private:
    A a;

public:
    void fB(){ a.fA_protected();} // this function should call the protected function
    void fB2(){ a.fA(); } 
};
谢谢你的帮助


(顺便提一下,这是我的第一个问题,我希望我能清楚地解释自己)

如果你能将B改为在a上取指针,以下可能会有所帮助: (我使用原始指针,因为根据注释,您不能使用智能指针)


如果您用一个代码示例来说明这一点,会更容易得到帮助。友元成员函数不符合封装的范例。如果你给出你的确切问题,我相信,会有一个比朋友更好的解决方案。嘿,juanchopanza,对不起-我现在添加了一个代码示例!user1767754-我需要使用A的一些内部功能,我想确保B中的其他功能不会意外使用fA_protected。我只遇到过一个例子,在10年的编程中我们不得不使用一个朋友,我很确定原因是因为编写正确的东西需要做太多的工作。你可能会更改
A吗a
标准::唯一性_ptra
?这将打破循环依赖并解决您的问题。
//A.h
#include "B.h"

class A
{
public:
    friend void B::fB();
    void fA() {};
protected:
    void fA_protected(){};
};

//B.h
class A; // forward declaration

class B
{
private:
    A* a;

public:
    B();
    ~B();                       // rule of 3
    B(const B& b);              // rule of 3
    B& operator = (const B&);   // rule of 3

    void fB(); // this function should call the protected function
    void fB2(); 
};

//B.cpp

#include "B.h"
#include "A.h"

B::B() : a(new A) {}
B::~B() { delete a; }                      // rule of 3
B::B(const B& b) : a(new A(*b.a)) {}       // rule of 3
B& B::operator = (const B&) { *a = *b.a; return *this; } // rule of 3

void B::fB() { a->fA_protected();}
void B::fB2() { a->fA(); }