gpt4 book ai didi

c++ - 本地类友元函数的名称查找

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:42 28 4
gpt4 key购买 nike

编译以下内容:

void bar() { /* ... */ }

void foo()
{
struct MyStruct
{
friend void bar();
};
}

int main()
{
//..
}

导致错误:

error: friend declaration 'void bar()' in local class without prior declaration

为什么名称查找失败?我该如何解决?

最佳答案

你不能在它的封闭范围之外访问一个本地类,即使你是 friend ,因为本地类的名​​称在它的封闭范围内是本地的 - §9.8/1。


但是,如果您只是想让它编译,请明确告诉它它在全局范围内查找...

friend void ::bar();

*由于某些原因,这在 VS 中修复了它,但在 GCC 中没有修复

§11.3/11(感谢 jrok)

If a friend declaration appears in a local class (9.8) and the name specified is an unqualified name, a prior declaration is looked up without considering scopes that are outside the innermost enclosing non-class scope.

关于c++ - 本地类友元函数的名称查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8718643/

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