嵌套命名空间的不同级别中的同名C ++友元类

时间:2016-12-18 07:40:36

标签: c++ namespaces friend friend-class

不确定这是否可行,但我在嵌套命名空间的不同级别有两个相同名称的类,我想让更浅层的类成为更深层次的朋友。例如:

在File1.h中:

namespace A
{
  class Foo
  {
    //stuff
  };
}

在File2.h中:

namespace A
{
  namespace B
  {
    class Foo
    {
      friend class A::Foo; //Visual Studio says "Error: 'Foo' is not a member of 'A'"
    };
  }
}

这可能吗?如果是这样,那么正确的语法是什么?

2 个答案:

答案 0 :(得分:0)

此代码放置在一个文件中时编译正常(;课程后A::B::Foo除外#include "File1.h"除外}:IdeOne example

因此,问题在于问题文本中未包含的代码。可能File2.h中遗忘了UploadedFile file = (UploadedFile)valueChangeEvent.getNewValue(); byte[] fileByteArray = IOUtils.toByteArray(file.getInputStream());

答案 1 :(得分:0)

如果您想避免将大型头文件包含在其他文件中,您需要至少在使用之前声明您的类:

namespace A
{
  class Foo;

  namespace B
  {
    class Foo
    {
      friend class A::Foo;
    }
  }
}