gpt4 book ai didi

c++ - 作为 B 类成员的 A 类如何共享 B 类的私有(private)成员?

转载 作者:行者123 更新时间:2023-11-30 02:06:51 25 4
gpt4 key购买 nike

我有以下代码:

大师.h

#ifndef MASTER_H
#define MASTER_H

class Master
{
friend class Friend;

public:
Master(void);
~Master(void);
void CallFriendFunction(int largeData);

private:
int largeData;

//Want this class to share largeData;
Friend testFriend;
};
#endif // MASTER_H

大师.cpp

#include "Master.h"

Master::Master(void)
{
//Inentionally left blank
}

Master::~Master(void)
{
//Intentionally left blank
}

void Master::CallFriendFunction(int largeData)
{
this->largeData = largeData;
this->testFriend.Test(this);
}

friend .h

#ifndef FRIEND_H
#define FRIEND_H

#include "Master.h"

class Friend
{
public:
Friend(void);
~Friend(void);

void Test(Master* masterPtr);
};

#endif // FRIEND_H

friend .cpp

#include "Friend.h"
#include <iostream>

Friend::Friend(void)
{
//Intentionally left blank
}

Friend::~Friend(void)
{
//Intentionally left blank
}

void Friend::Test(Master* masterPtr)
{
std::cout << masterPtr->largeData << std::endl;
}

我希望类 Friend 能够共享 Master 的私有(private)成员。但是,我无法编译此代码。我试过 Forward Declaration 和 #includes,但我开始陷入循环依赖。当 Friend 类不是 Master 类的成员时,代码可以编译?

Friend类有没有可能成为Master的一员,成为 friend 呢?Friend 类还能如何访问 Masters 私有(private)成员?

最佳答案

您需要以下包含和转发声明:

在 Master.h 中:

#include "Friend.h"

在 Friend.h 中:

class Master;

在 Friend.cpp 中:

#include "Master.h"

将前向声明放在 Friend.h 中可以防止循环依赖。前向声明就足够了,因为您只声明了一个 Master* 参数,还没有使用它的成员。

您确实需要包含 Master.h 中的 Friend.h,因为您正在声明一个 Friend 成员,这需要一个完整的类型.

关于c++ - 作为 B 类成员的 A 类如何共享 B 类的私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8493381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com