以下代码无法在 Visual Studio 2103 Express 预览版中编译:
template<int N> class TTOuter;
template<>
class TTOuter<1>
{
public:
class inner
{
friend class TTOuter<1>;
private:
inner(int n) : data(n) {;}
int data;
};
private:
inner x;
public:
TTOuter(int n) : x(n) {;} //Fails here
};
错误:“TTOuter<1>::inner::inner(int n)”不可访问
如果外部类不是专门的模板,则类似的访问会成功:
class Outer
{
public:
class inner
{
friend class Outer;
private:
inner(int n) : data(n) { ; }
int data;
};
private:
inner x;
public:
Outer(int n) : x(n) { ; }
};
没有错误。
我尝试向前声明 TTOuter<1> 像:
template<> class TTOuter<1>;
我还尝试通过以下方式替换朋友声明:
template<int N> friend class TTOuter;
但两者都不起作用。
将不胜感激任何见解。谢谢你。