问题标签 [friend-class]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
61 浏览

c++ - 为什么执行 PassKey 模式的这段代码不能编译?

这是代码,c++11:

编译器给出以下错误:

0 投票
2 回答
556 浏览

c++ - 使所有派生模板类成为 C++ 中其他类的朋友

假设我必须遵循层次结构:

现在我想要一个独立的类(不是从 Base 派生的),它可以Base<T>::container直接从 Base 或任何派生类访问。我阅读了有关模板朋友类的信息,它似乎是我问题的解决方案,但我还无法弄清楚语法。我正在寻找类似的东西:

朋友类行导致一个error: specialization of ‘template<class T> class Base’ must appear at namespace scope template<T> friend class Base<T>并且成员变量container仍然无法访问。

0 投票
0 回答
105 浏览

c++ - Friend 类只读访问 C++

我的问题有点类似于friend class with limited access的标题。但是我通过“仅限访问”定义的有限访问。我的意思是,我有一个主类来完成这项工作并创建一个辅助类,该类对于显示内部用于调试目的很有用。因此,在 Main 中,我将 Helper 定义为朋友。

现在我希望 Helper 类只具有对私有变量的只读访问权限而不是写访问权限。可能吗?

现在我有我的助手类。

0 投票
2 回答
52 浏览

c++ - 我应该在派生类或基类中的哪个位置声明朋友类?

我有一个在 C++ 中实现接口(抽象类)的派生类。这个接口有几个受保护的函数,它们的实现在派生类中定义。

现在我试图通过将外部类声明为派生类中的朋友来从外部类访问派生类中的这些受保护函数。但是,编译器仍然抱怨我无法访问受保护的成员函数。

例如:我有类ConnectSession实现IConnectSession. SystemProcess还有一个名为谁想要访问受保护的成员函数的外部类HandlePriviledgedRequest

在 IConnectSession.h

在 ConnectSession.h

在朋友班我尝试访问HandlePriviledgedRequest()

系统进程.cpp

它从编译器中抛出一个错误,说即使我已经声明SystemProcess为朋友,我也无法访问受保护的成员。由于没有继承友元声明,因此我特别在ConnectSession. 为什么它不起作用以及如何解决它?谢谢。

0 投票
4 回答
1194 浏览

c++ - 为什么我不能在朋友类中实例化一个构造函数是私有的类?

我有两节课;Salary它旨在保存有关员工薪水的信息和计算,并且Employee具有类型对象class Salary和一些成员,例如员工的姓名和地址...

  • 我想要做的是防止class Salary被实例化,除了 class Employee. 所以我声明了Salaryprivate 的构造函数并结交EmployeeSalary. 但我得到错误:

    /li>
  • 如果我转发声明,问题就会消失main

    并在薪水中结交main这样的朋友:class Salary

    /li>

现在程序可以正确编译了!

*** 如果我以这种方式声明一个对象,主要的另一件事是:

0 投票
2 回答
64 浏览

c++ - 两个班级互相友好

我试图让两个班级彼此成为朋友,但我不断收到“使用未定义类型 A”的错误消息。

这是我的代码:

我尝试添加 A 类;如顶部所示,但仍然相同。

我正在尝试通过友谊使 A 类访问 B 类,反之亦然。

0 投票
1 回答
260 浏览

c++ - 从朋友类继承时无法使用大括号括起来的初始化列表

我正在尝试为从其父朋友类的子类继承的数据结构使用初始化列表。下面我编译了一个示例来演示该问题(在 c++11 中)。

声明很好,但初始化不是,它给出了错误could not convert {...} from '<brace-enclosed initializer list>' to i_gossip::i_am_secret secret。可以通过以下方式寻址和设置结构的每个单独成员来编译程序:

如果成员可以使用,为什么初始化列表会失败并出现编译错误?

0 投票
0 回答
37 浏览

objective-c - 您可以在 Objective-C 中创建仅在您的库中可见的类方法吗?

在 Objective-C 中的朋友类上发现了这个 StackOverflow 问题,这与我试图解决的问题相似,但并不完全相同。所以我想扩展他们的例子。

假设我想要给猴子多个香蕉的能力,他会保留一系列他自己的香蕉。当我告诉他吃饭时,他从他的阵列中吃东西。然后我可以让他随机给我一个香蕉:

香蕉.h

香蕉.m

猴子.h

猴子.m

在这种情况下,Banana.h并且Monkey.h将是我正在分发的库中的公共标题。我的库的预期用途如下所示:

客户端应用程序.m

上面代码的直接问题是我的库无法编译,因为该类的接口没有Banana定义peel方法(由 使用Monkey.m

我在这个问题开头链接的 StackOverflow 问题建议创建第三个头文件:

BananaPrivate.h

然后在Monkey.m我可以导入BananaPrivate.h并且我可以突然调用该peel方法。但是这失败了,因为当我尝试导入时,我创建了一个冲突——我在导入时BananaPrivate.h已经定义了BananaBanana.hMonkey.h

我无法从中删除Banana.hMonkey.h因为其中一种方法Monkey返回类型的实例Banana

我通过这样的子分类找到了一个古怪的解决方法Banana

内部香蕉.h

然后Monkey.m我就可以安然无恙#import "InternalBanana.h"。然而这有两个问题:

  1. 它仅适用于我的 Monkey实例化的 Bananas (如果我的库的用户实例化一个 Banana 并将其传递给我的 Monkey,它将是一个 Banana 而不是 InternalBanana)
  2. 我必须创建一个InternalBanana.m文件,但在这个文件中我无法定义peel. 尝试在其中定义peelInternalBanana.m引发peeled未定义的错误,因为peeled它是超类的私有变量。如果我在其中定义peel并且InternalBanana.m它只调用[super peel],那也将失败,因为Banana没有定义peel方法。虽然这可行,但它确实会导致 Xcode 抛出一个警告,指出没有方法定义peel(但尽管有警告,它仍会构建并运行)

这个猴子生意的正确解决方案是什么?

0 投票
2 回答
1225 浏览

c++ - 复制和移动构造函数是自动朋友吗?

当我们定义复制或移动构造函数时,我们可以访问另一个类的私有变量。C ++会friend自动将它们相互连接吗?

例如:

0 投票
1 回答
34 浏览

c++ - 班级的朋友无法访问

我正在尝试编写一个非常简单的代码作为练习。问题是当我将一个类的成员函数设为另一个类的成员函数时,它说无法访问,但是当我将整个类声明为另一个类的朋友时,它工作正常。