c++ - 编译器不识别友元函数

标签 c++ class friend

友元函数无法识别

#include <iostream>
#include <cmath>

class hello {
    private:
        int a, b;
public: 
    hello(int a, int b) {
        this->a = a;
        this->b = b;
    }
friend int add();
};

int add() {
return a + b;
}

int main() {
hello number(1, 2);
std::cout << number.add();
}

预期:它应该添加 hello 类的 2 个成员变量(带有 friend 函数!)

实际结果:友元函数“add”不被识别为类成员

(错误信息:error: 'class hello' has no member named 'add')

add() 中的 a 和 b 也无法识别。 (显然)

最佳答案

这不是友元函数的工作方式。友元函数是一个普通函数(不是成员函数),这意味着它不与特定对象实例相关联。它与 not-friend 函数之间的唯一区别是允许 friend 访问与其成为 friend 的类的私有(private)成员。

如果您希望能够访问特定对象实例的成员,您应该使用成员函数而不是友元函数:

class hello {
    int a, b;
public:
    int add() { return a + b; }
}

或者在友元函数中取一个对象实例作为参数:

int add(const hello& instance) {
    return instance.a + instance.b;
}

关于c++ - 编译器不识别友元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56906455/

相关文章:

c++ - 即使读取成功,最终计数为 0

c++ - 如何在 OpenGL 中高效地显示数千个具有动态颜色的相同网格?

c++ - 对整数类型进行舍入,但不对小数类型进行舍入

c++ - 'class' 类型重定义/基类未定义

ios - 使用 iOS 版 Facebook SDK 3.0 检索 Facebook 好友的家乡、位置和生日

c++ - 如何声明两个类使得 A 具有 B 的成员并且 B 将 A 的成员标记为 friend ?

c++ - **编译器错误** - getline() 函数不接受第一个参数 "std:ifstream"我的问题是什么?

PHP 类具有来自 Traits 的冲突构造函数定义

c++ - 友元迭代器可以访问非静态数据成员吗?

c++ - 我可以在类声明中使用前面的值吗?