【问题标题】:Compiler doesn't recognize friend function编译器无法识别友元函数
【发布时间】:2019-07-05 16:20:28
【问题描述】:

无法识别好友功能

#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 个成员变量(使用友元函数!)

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

(错误信息:错误:“class hello”没有名为“add”的成员)

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

【问题讨论】:

  • 这不是朋友功能。友元函数是能够访问类的私有类成员的常规函数​​。而已。而已。一点也不差。你有:“int add() { return a+b; }”。什么是“一”?什么是“b”? add() 只是一个函数。仅仅因为它是一个友元函数并不能使它成为一个类方法。
  • 你知道friend函数是什么,它和成员函数有什么不同吗?因为您似乎在这里想要成员函数(方法)。考虑从good C++ book 学习而不是随机编码。

标签: c++ class friend


【解决方案1】:

友元函数不是这样工作的。友元函数是一个普通函数(不是成员函数),这意味着它不与特定对象实例相关联。它与非好友函数之间的唯一区别是允许好友访问与他们成为好友的类的私有成员。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    相关资源
    最近更新 更多