打印

友元函数问题

[复制链接]
957|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sinadz|  楼主 | 2013-6-29 12:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <iostream>

using namespace std;

namespace Test{
    class A{
    public:
        friend void TestFn1(const A &a){};
    };
    void TestFn2(const A &a){};
}
class B{
public:
    operator Test::A(){return Test::A();}
};
using namespace Test;
void TestFn3(const A &a){}

void main(){
    B obj;
    TestFn1(obj);
    TestFn2(obj);//不需要通过对象调用,因为有using namespace Test;
    TestFn3(obj);
}
问题What does “operator Test::A()” mean? TestFn1(obj) can’t get through the compiling,but TestFn2(obj) and TestFn3(obj) can,why?

相关帖子

沙发
sinadz|  楼主 | 2013-6-29 12:44 | 只看该作者
operator Test::A() 定义了一个转型的操作符. 在 B b; (Test::A)b 的时候调用.
friend 是加在声明前面的, 加在函数定义前还真没见过.

使用特权

评论回复
板凳
baidudz| | 2013-6-29 12:47 | 只看该作者
友员这么用是为了实现啥目的

使用特权

评论回复
地板
无冕之王| | 2013-6-29 13:07 | 只看该作者
友元函数本来就可以写在类内部,就跟成员函数可以在类内声明类外定义也可以直接在类内定义一样
友元函数也可以类内声明类外定义也可以直接在类内部定义

使用特权

评论回复
5
txcy| | 2013-6-29 13:12 | 只看该作者
类中定义的友元函数,类外部是可见的,定义在名空间内部的类中,在名空间中是可见的,使用using namespace开放名空间到全局名空间中后,在名空间可见的,全局名空间,也应该是可见的,
所以名空间中类中定义的友元函数,开放名空间到全局名空间中后,应该在全局名空间可见。
而这里所这个函数有问题,不能编译,显然是VC的一个BUG,应该不是标准。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝