有这样的代码:
#include <iostream>
class A{
public:
friend void fun(A a){std::cout << "Im here" << std::endl;}
friend void fun2(){ std::cout << "Im here2" << std::endl; }
friend void fun3();
};
void fun3(){
std::cout << "Im here3" << std::endl;
}
int main()
{
fun(A()); // works ok
//fun2(); error: 'fun2' was not declared in this scope
//A::fun2(); error: 'fun2' is not a member of 'A'
fun3(); // works ok
}
如何访问函数 fun2()?
最佳答案
class A{
public:
friend void fun(A a){std::cout << "Im here" << std::endl;}
friend void fun2(){ std::cout << "Im here2" << std::endl; }
friend void fun3();
};
尽管您对 fun2
的定义 确实 定义了一个“全局”函数而不是一个成员,并使它成为 的
同时,您仍然缺少在全局范围内对同一函数的声明。 friend
A
这意味着该范围内的代码都不知道 fun2
存在。
同样的问题发生在 fun
上,除了 Argument-Dependent Lookup 可以接管并找到函数,因为有一个 A
类型的参数。
我建议改为以通常的方式定义您的函数:
class A {
friend void fun(A a);
friend void fun2();
friend void fun3();
};
void fun(A a) { std::cout << "I'm here" << std::endl; }
void fun2() { std::cout << "I'm here2" << std::endl; }
void fun3();
现在注意 everything works (fun3
除外,因为我从未定义过它)。
关于c++ - 访问类中定义的友元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57485916/