This question already has answers here:
What's the scope of inline friend functions?

(5个答案)


7个月前关闭。




在编译以下代码时:
class A {
    A() = default;
public:
    friend A getA() {
        return A();
    }
};

int main()
{
    A a = getA();
}

编译器给我一个错误:



这是为什么?

最佳答案

因为无法通过名称查找找到friend function getA

(强调我的)



ADL也无法找到getA,(它没有参数)。您需要在 namespace 范围内提供声明。例如

class A;
A getA();
class A {
    A() = default;
public:
    friend A getA() {
        return A();
    }
};

09-25 21:44