我正在尝试为另一个类创建一个朋友函数,但我当前的布局导致访问问题和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的私有成员元素是不可访问的,尽管它是成员函数.此外,它们相互包含,最终会导致错误.但是,当这两个类位于同一个头文件中时,此设置可以正常工作.我怎样才能实现这样的设置,其中一个类具有需要与另一个类成为朋友的成员函数,并且将这两个类放在单独的头文件中.
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)