#include<iostream>
using namespace std;
template <class T, class U>
class Enclosing {
private:
int x;
public:
class Nested;
Nested setnested (int x){
Enclosing::Nested* temp;
temp->A->x=5;
return *temp;
}
class Nested {
Enclosing *A ;
void NestedFun() {
cout<<this->A->x;
}
};
};
int main()
{
return 0;
}
这段代码运行良好,但是如果我消除了Enclosing类的模板符号,则会出现错误。'Enclosing* Enclosing::Nested::A' is private within this context.
如何在类外覆盖嵌套的setnested(int x)
? 最佳答案
实际上,相同的错误适用于模板版本,只是在实例化A
之前不检查setnested
的访问说明符。
如果将这些行添加到main
:
Enclosing<int,int> e;
e.setnested(42);
您得到相同的error。解决此问题的一种方法是使
Enclosing
成为Nested
的 friend ,如下所示:class Nested {
friend class Enclosing;
// ...
};
这是demo。template <class T, class U>
auto Enclosing<T, U>::setnested(int x) -> Nested {
Enclosing::Nested* temp;
temp->A->x=5;
return *temp;
}
这是demo。关于c++ - 内部阶层的可及性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64305249/