我正在尝试为另一个类创建友元函数,但我当前的布局导致访问问题和 header 包含问题。
在我的项目中,我有两个文件: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
但是,对于这种设置,Visual Studio 认为类 A 的私有(private)成员元素是不可访问的,尽管它是一个成员函数。此外,它们相互包含,最终会导致错误。但是,当这两个类位于同一个头文件中时,此设置工作正常。我怎样才能实现这样的设置,其中一个类有一个成员函数需要与另一个类成为 friend ,同时让这两个类位于单独的头文件中。
最佳答案
friend void testFriend(A in);
与 B::testFriend
无关。
你可以让全类同学成为 friend :
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; }
};
关于c++ - 好友功能可访问性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48673640/