gpt4 book ai didi

c++ - 访问类中定义的友元函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:38:13 25 4
gpt4 key购买 nike

有这样的代码:

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com