C++ 内部类其间 友元失效

C++ 内部类之间 友元失效
公司有一个项目是需要把java翻译成C++,其中有一个java类中包含了内部类的问题,在java中一个类中的两个内部类直接private成员是相互可见的,在翻译的时候想到用友元但是发现了一些奇怪的问题,先给代码具体的问题会一一列出:
头文件:

class Test
{
public:
Test();
private:

class TestA
{
private:
friend class Test;//问题重点就在这里
void test();
int m;
public:
TestA();

};
public:
class TestB
{
public:
TestB();
void testFunc();
};

};
class TT
{
private:
TT();
friend class Test::TestB;
};

资源文件:
#include"Test.h"
#include<iostream>
using namespace std;
Test::Test()
{
cout<<"Test class is init"; 
}
Test::TestA::TestA():m(0)
{

cout<<"Test::TestA is init";
}
void Test::TestA::test()
{
cout<<"Test::TestA::test() is invoke";
}
Test::TestB::TestB()
{
cout<<"Test::TestB is init";
}
TT:: TT()
{
cout<<"TT is init";
}
void Test::TestB::testFunc()
{
Test::TestA* A = new Test::TestA();
A->test();
TT* t = new TT();
}

void main()
{
Test::TestB b;
b.testFunc();
cin.get();
}
问题1:
在代码中标记了重点的地方,现在是将整个Test设置为友元,其实最初我不是这样写的,最初只是将TestB设置为友元(friend class TestB)但是在TestB::testFunc出现了奇怪的现象,由于TestA的构造函数为私有,原本设置为友元应该是可以访问的,但是现在却访问不了,报错信息说TestA中的构造函数式private的不能访问,why?
问题2:
偶然的修改把friend class TestB改成了friend class Test,居然在TestB::testFunc中可以访问了,为了验证,我在类外部新加了一个测试类TT,无论将TT的友元设置为Test还是TestB,在TestB::testFunc方法中都可以调用其私有的构造函数,在此想是否解释为友元是将一个访问域整个设置,因为我的这几个测试类比较简单,内部和外部类之间没有什么关联,所以如果是public的内部类其实就只相当于一个命名空间而已,搜索了很多资料也没找到原因,求助各位大神帮忙解释一下。
另外,猛然发现在内部类之间,无论是private还是public的,他们之间都是互相可见的。

由于只是做测试,所以编码、格式、命名都很不规范很随意,各位见笑了。
分不多了,只剩这点,但是我觉得这个问题还是很有意思的,希望各位帮帮忙,见谅。

------解决方案--------------------
代码格式化后贴出, 这样贴代码没人看.
------解决方案--------------------

public:
friend class Test;//为什么要私有友元呢?

------解决方案--------------------
将内部类friend,然后将该类的方法设置为private,保证数据的封装性,不要透露细节给用户