朋友功能可访问性问题

use*_*991 2 c++ friend

我正在尝试为另一个类创建一个朋友函数,但我当前的布局导致访问问题和header-include问题.

在我的项目中,我有两个文件:A类和B类.为了简洁起见,所有内容都在头文件中内联,因为它仍然表明了我的问题.

#ifndef CLASSA
#define CLASSA

#include "ClassB.h"

class A {
   private:
      int x;
   public:
      A(int x) {
          this->x = x;
      }
      friend void testFriend(A in);
};

#endif

#pragma once
#ifndef CLASSB
#define CLASSB
#include <cstdio>
#include "ClassA.h"

class B {
public:
   void testFriend(A in) {
       printf("%d", in.x);
   }
};
#endif
Run Code Online (Sandbox Code Playgroud)

但是,使用此设置,Visual Studio认为类A的私有成员元素是不可访问的,尽管它是成员函数.此外,它们相互包含,最终会导致错误.但是,当这两个类位于同一个头文件中时,此设置可以正常工作.我怎样才能实现这样的设置,其中一个类具有需要与另一个类成为朋友的成员函数,并且将这两个类放在单独的头文件中.

Jar*_*d42 5

friend void testFriend(A in);与...无关B::testFriend.

你可以改为全班的朋友:

class A {
   private:
      int x;
   public:
      A(int x) : x(x) {}
      friend class B;
};

class B {
public:
   void testFriend(A a) { std::cout << a.x; }
};
Run Code Online (Sandbox Code Playgroud)