问题标签 [friend-function]

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 投票
3 回答
3272 浏览

c++ - 从 C++ 标头中定义的友元函数调用函数

我已将>>运算符重新定义为标题中模板类中的友元函数。在其中,我需要调用另一个inputHelper我在标题中定义的函数。(输入助手是递归的)

头文件如下:

但是,在编译时,它说|140|error: 'inputHelper' was not declared in this scope|. 您是否必须做一些特别的事情,因为它们都被定义为标题中的友元函数?我有点理解这inputHelper超出了课程的范围,但我不确定如何解决这个问题。

0 投票
2 回答
106033 浏览

c++ - 运算符重载:成员函数与非成员函数?

我读到声明为成员函数的重载运算符是不对称的,因为它只能有一个参数,而自动传递的另一个参数是this指针。所以没有标准来比较它们。另一方面,声明为 a 的重载运算符friend对称的,因为我们传递了两个相同类型的参数,因此可以比较它们。

我的问题是,当我仍然可以将指针的左值与引用进行比较时,为什么首选朋友?(使用非对称版本的结果与对称版本相同) 为什么 STL 算法只使用对称版本?

0 投票
2 回答
465 浏览

java - java中是否存在任何关于友元函数的内容?

嗨,我想在 C++ 中的朋友函数行上实现一个方法。我该怎么做?如果没有,为什么java不需要它?请建议如何实现它..如示例中所示:

0 投票
3 回答
1117 浏览

c++ - 在类中定义 operator<<

考虑以下代码:

如何在类operator<< 内部定义,而不是作为友元函数?像这样的东西:

上面的代码会产生编译错误,因为它接受两个参数。删除MyClassReference参数修复了错误,但我有依赖于该参数的代码。只是MyClassReference相当于*this

0 投票
2 回答
954 浏览

c++ - 朋友没有得到私人会员

我有一个名为Packet我想序列化的类,QDataStream我重载了operator>>operator<<并且在我调用的重载函数中,stream << somIntMember虽然它声明为朋友,但它抱怨私有变量

这是我的标题。

这里是 Ciode

0 投票
4 回答
3242 浏览

c++ - 创建一个函数,它是多个类的朋友

在下面的代码中,我试图创建一个函数“patient_count”,它是“horse”、“pig”和“dog”类的朋友。我可以让功能成为 1 个班级的朋友,但不能成为所有 3 个班级的朋友。谁能告诉我我的错误是什么?

0 投票
2 回答
2829 浏览

c++ - 如何解决“声明朋友时必须使用类”错误?

我从 Dev-C++ 得到这个错误:

但在使用 Microsoft Visual C++ 编译器编译时运行良好。

0 投票
3 回答
926 浏览

c++ - C++0x,使用友元运算符 ""() 的用户定义文字

operator "" (...)将 an 定义为友元函数是否可能和/或有用?

我正在考虑“有用”,特别是因为operator ""应该只在命名空间中定义的规则——尤其是因为以开头的标识符_被保留在全局命名空间中。这friend违反了这个规则吗?所以,这种不完全的封装不会有任何好处,对吧?

0 投票
3 回答
844 浏览

c++ - 声明友元函数时出现变量范围错误

友元函数不能访问类的变量

我遇到了几个友元函数无法访问它们被声明为友元的类中的变量的问题。

实际的错误文本是:错误:'fid' 未在此范围内声明。这对其他私有变量重复。对于三个函数,read、negative 和 write,给出了相同的错误。

几点注意事项: 1)本实验要求我编写代码,以便两个类都可以使用这些函数。

我正在使用 g++ 使用 code::blocks 在 windows 中编译它,我还尝试使用 -g 标志从终端使用 g++ 在 ubuntu 中编译我的代码,两次都得到相同的错误。

您的任何建议将不胜感激。

头文件

C++程序

测试功能的程序

0 投票
2 回答
302 浏览

c++ - 模板类上的 C++ 运算符重载

我有一个模板化的 Stack 类在内部用向量实现。

这是我的(简化的)TStack.h 的内容:

这是我的(简化的)主要课程:

这是编译结果:

我不知道错误消息的含义是什么。

在 operator+ 函数中,我使用相同的方法在 printAll() 中获取迭代器,但它在 operator+ 函数中无法正常工作。我知道我可以避免在 operator+ 函数中使用迭代器,但我只是好奇如何解决这个问题。