gpt4 book ai didi

C++ 友元函数引用

转载 作者:行者123 更新时间:2023-11-28 03:54:50 24 4
gpt4 key购买 nike

我有这种情况(两个类有两个不同的头文件):

b.h

#include "a.h"

class B {
friend void B* A::create(void);
private:
int x;
};

啊.h

#include "b.h"

class A {
public:
void B* create(void);
...
};

基本上类 A 创建“B”对象。我想授予创建函数 create() 访问权限以修改类 B 的私有(private)成员“x”。我想在 C# 中模拟“internal”关键字,但在更细粒度的级别。

我遇到的问题是我最终得到了一个循环标题引用。 b.h 想跟在 a.h 之后,但是 a.h 想跟在 b.h 之后。这样做的正确方法是什么?我需要求助于 void* ptrs 吗?因为我只创建一种类型的对象,所以我认为我不需要工厂模式。希望我遗漏了一些简单的东西。

最佳答案

您需要的是“前向声明”。基本上你不会在其他类的标题中包含类的标题(除非你想使用组合,否则你必须这样做)。在您的情况下,它看起来像这样:

// B.h
class A;
class B {
// declare pointers to A freely
};

在 A.h. 中反过来

您可能需要在 B.cpp 中包含 A.h(反之亦然),以便能够实际取消引用那些指向访问字段的指针,但是循环 header 包含的问题现在已经消失。

关于C++ 友元函数引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4028785/

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