gpt4 book ai didi

c++ - 关于 C++ 友元声明中没有返回类型的意外错误

转载 作者:行者123 更新时间:2023-11-30 03:30:21 25 4
gpt4 key购买 nike

我正在尝试使用 g++ 编译以下代码(根据实际使用进行了简化):

namespace A {
class B;
}

A::B operator+(A::B a, A::B b);

namespace A {
class B {
private:
int i;
public:
B() : i(0) {}
B(int j) : i(j) {}

friend B ::operator+(B a, B b);
};
}

A::B operator+(A::B a, A::B b) {
return A::B(a.i + b.i);
}

int main() {
A::B a(1), b(2);
A::B c = a+b;
return 0;
}

据我所知,类 B 中的友元声明是正确的,并且需要::全局范围声明,否则编译器会假定 A::operator+(B a, B b) 的意思。

但是,在编译时,gcc 给出了错误信息

ISO C++ forbids declaration of ‘operator+’ with no type

我不知道如何解决这个问题。它之后的错误消息给人的印象是 gcc 忽略了该行中 B 和::之间的空格,而是将其解释为 B 的成员函数的友元声明。我如何告诉它我想要什么?

最佳答案

按以下方式在类定义中声明友元运算符

friend B (::operator+) (B a, B b);

或者喜欢

friend B (::operator+(B a, B b));

否则编译器认为它是声明的类的成员函数,没有显式返回类型(隐含 int)

friend B::operator+(B a, B b);

虽然这样声明会好得多

friend B (::operator +)( const B &a, const B &b);

关于c++ - 关于 C++ 友元声明中没有返回类型的意外错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45033943/

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