声明友元函数,但在其他名称空间中定义它

时间:2015-12-26 13:33:56

标签: c++ namespaces friend

   class A
    {
    private:
        A(int x, int y);
        friend A* CreateA(int x, int y);
    };

    namespace B
    {
        A* CreateA(int x, int y)
        {
            return new A(x, y);
        }
    }

编译器给出了以下错误:调用类' A'的私有构造函数。 是否可以在声明之外的其他命名空间中使用友元函数定义?

编辑: 这是解决方案:

class A;

namespace B
{
    A* CreateA(int x, int y);
}

class A
{
private:
    A(int x, int y);
    friend A* B::CreateA(int x, int y);
};

namespace B
{
    A* CreateA(int x, int y)
    {
        return new A(x, y);
    }
}

0 个答案:

没有答案