gpt4 book ai didi

c++ - 在类中实现并在全局命名空间中调用的友元函数

转载 作者:太空狗 更新时间:2023-10-29 20:43:56 27 4
gpt4 key购买 nike

我写了下面的代码:

#include<iostream>
using namespace std;

class foo {
private:
int i;
public:
foo(): i(1) { }
friend int func1(int i) {
return 0;
}
friend int func2(foo &f) {
return f.i;
}
};

int main()
{
foo f;
cout << func2(f) << endl;
cout << func1(1) << endl;
return 0;
}

但它无法编译并出现以下错误:

ss.cpp: In function ‘int main()’:
ss.cpp:28:17: error: ‘func1’ was not declared in this scope

当我删除这一行时:

cout << func1(1) << endl;

编译成功

这是否意味着如果我想在类中定义一个友元函数并在全局命名空间中调用它,它必须与类有某种关系?如果是这样,详细的规则是什么?

我的编译器是g++-4.7.2

最佳答案

您似乎自己找到了规则。要找到,该函数必须具有类类型的参数。

参见 Argument Dependent Lookup在维基百科。

关于c++ - 在类中实现并在全局命名空间中调用的友元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14170523/

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