gpt4 book ai didi

c++ - 在专用模板中访问嵌套 friend 类的私有(private)成员

转载 作者:行者123 更新时间:2023-11-28 07:27:29 25 4
gpt4 key购买 nike

以下代码无法在 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;

但两者都不起作用。

将不胜感激任何见解。谢谢。

最佳答案

我认为这只不过是你代码中的错字

public:
TOuter(int n) : x(n) {;} //Fails here
//^^^^^^ Shouldn't it be TTouter???
};

编辑:

如果我稍微编辑一下您的代码:

class TTOuter<1>
{
public:
typedef TTOuter this_type; // <-- I add this typedef
class inner
{
friend class this_type; // <-- Intellisense works
//friend class TTOuter<1>; // <-- intellisense barks
inner(int n) : data(n) { ; }
int data;
};
TTOuter(int n) : x(0) {}
};

现在智能感知停止提示。

关于c++ - 在专用模板中访问嵌套 friend 类的私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18493233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com