gpt4 book ai didi

c++ - g++ 4.5 找不到友元函数

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

你好!

我对 friend 的使用有疑问在 C++ 中。考虑以下代码:

#include <ostream>

struct F {
};

struct N {
friend std::ostream& operator<< (std::ostream&, const N&);
friend std::ostream& operator<< (std::ostream&, const F&);
};

void foo(std::ostream &out) {
F bar;
out << bar;
}

我的理解一直是,friend类似于 static具有附加属性 friend函数可以访问类的私有(private)部分。在这种假设下,代码应该可以编译,因为有一个 operator<<。这需要 ostream&和一个(常量)F& .

g++ 4.0 似乎同意我的想法,因为它接受了该代码。然而,更新的 g++ 4.5(.2) 拒绝了带有消息的代码:

ns.cc: In function 'void foo(std::ostream&)':
ns.cc:14:10: error: no match for 'operator<<' in 'out << bar'

是 g++ 4.5 错了还是我(和 g++ 4.0)错了?

(将友元声明移入 F 类的解决方案没有帮助,因为 operator<< 需要访问 N 的私有(private)部分。)

问候,斯特凡

最佳答案

问题是友元声明不提供全局函数声明,除非您提供内联实现。

struct N {
friend void func1() { }
friend void func2();
friend void func3();
};

void func3();

func1(); /* OK */
func2(); /* not OK */
func3(); /* OK */

关于c++ - g++ 4.5 找不到友元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5391927/

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