不同命名空间中的友元运算符
Friend operator in different namespace
当前以下代码不起作用:
namespace inner
{
struct Test
{
Test() : n(0) { }
friend int ::operator+(const Test& a, const Test& b);
private:
int n;
};
}
int operator+(const inner::Test& a, const inner::Test& b)
{
return a.n + b.n;
}
我得到的错误是
error: 'int operator+(const inner::Test&, const inner::Test&)' should have been declared inside '::'
friend int ::operator+(const Test& a, const Test& b);
^
我原以为对名称空间进行限定可以解决问题,但事实并非如此。什么是变通方法?
友元声明只能将名称引入到紧邻的命名空间中。
如果你想与任何其他命名空间中的函数成为朋友,那么你需要在朋友声明之前,在其命名空间中声明该函数。正如错误消息所说。
在这种情况下,您可能希望运算符位于inner
中,而不是全局命名空间中。依赖于参数的查找仍然会在像test_a + test_b
这样的表达式中找到它,即使它不在作用域中。
在结构中使用运算符之前,必须声明运算符。
相关文章:
- 模板类无法识别友元运算符
- 模板化类的嵌套类中的友元运算符
- 为什么T是未定义的?我正在尝试实现一个用于双链表的节点类,它不喜欢我使用友元运算符后的T
- C++模板内部类友元运算符重载
- 使用shared_ptr向量重载 ostream 友元运算符
- 使用模板类重载的友元运算符
- 尝试重载模板类友元<<运算符时出错
- 友元运算符中的变量范围
- 为什么友元运算符<<在某些情况下使用,而在其他情况下不使用
- 模板化类中友元运算符的多个定义
- 模板类友元运算符成员函数
- C++模板类友元运算符重载
- 如何在模板类中使用友元运算符
- 类内声明的友元运算符中左手参数的隐式转换
- 在模板类中重载友元运算符方法
- 在Wandevoorde&Jossutis的书中有两个参数的非友元运算符+
- 使用友元运算符分配和私有变量是不可访问的
- 在模板类中创建重载友元运算符的模板
- 不同命名空间中的友元运算符
- C++0x,用户定义的文本,带有友元运算符 " " ()