编译器不识别友元函数
Compiler doesn't recognize friend function
友元函数无法识别
#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();
}
预期:它应该添加 class hello 的 2 个成员变量(带有 friend 函数!)
实际结果:友元函数"add"不被识别为class成员
(错误信息:错误:'class hello'没有名为'add'的成员)
add() 中的 a 和 b 也无法识别。 (显然)
友元函数不是这样工作的。友元函数是一个普通函数(不是成员函数),这意味着它不与特定对象实例相关联。它与 not-friend 函数之间的唯一区别是允许朋友访问与他们成为朋友的 class 的私有成员。
如果您希望能够访问特定对象实例的成员,您应该使用成员函数而不是友元函数:
class hello {
int a, b;
public:
int add() { return a + b; }
}
或者在友元函数中取一个对象实例作为参数:
int add(const hello& instance) {
return instance.a + instance.b;
}
友元函数无法识别
#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();
}
预期:它应该添加 class hello 的 2 个成员变量(带有 friend 函数!)
实际结果:友元函数"add"不被识别为class成员
(错误信息:错误:'class hello'没有名为'add'的成员)
add() 中的 a 和 b 也无法识别。 (显然)
友元函数不是这样工作的。友元函数是一个普通函数(不是成员函数),这意味着它不与特定对象实例相关联。它与 not-friend 函数之间的唯一区别是允许朋友访问与他们成为朋友的 class 的私有成员。
如果您希望能够访问特定对象实例的成员,您应该使用成员函数而不是友元函数:
class hello {
int a, b;
public:
int add() { return a + b; }
}
或者在友元函数中取一个对象实例作为参数:
int add(const hello& instance) {
return instance.a + instance.b;
}