C++ C++;-可访问性与可见性

C++ C++;-可访问性与可见性,c++,templates,inheritance,visibility,typedef,C++,Templates,Inheritance,Visibility,Typedef,我正在做一个练习来理解C++的可访问性和可见性 下面的代码显然无法编译,但这是理想情况下必须编译的代码 B使用模板参数节点从A继承,并且节点是B的私有节点 template<typename T> class A {...}; template<typename T> class B: public A<B<T>::Node> { private: struct Node{ int x=42;}; }; 模板 A类{…}; 样板 B类

我正在做一个练习来理解C++的可访问性和可见性

下面的代码显然无法编译,但这是理想情况下必须编译的代码

B使用模板参数节点从A继承,并且节点是B的私有节点

template<typename T>
class A {...};


template<typename T>
class B: public A<B<T>::Node> {
private:
    struct Node{ int x=42;};
};
模板
A类{…};
样板
B类:公共A{
私人:
结构节点{intx=42;};
};
我的建议是:

template<typename T>
class A {...};


template<typename T>
class B: public A<B<T>::N> {
private:
    struct Node{ int x=42;};
public:
    typedef Node N;
};
模板
A类{…};
样板
B类:公共A{
私人:
结构节点{intx=42;};
公众:
类型定义节点N;
};
我得到
错误:“模板类A”的模板参数列表中参数1的类型/值不匹配


我真的很迷茫,非常感谢您的帮助。

问题是,
B::Node
不能用于该行,因为
B
尚未完成。如果没有
B
的完整定义,编译器将无法使用嵌套类型

如果您使用以下选项,错误会更清楚:

template<typename T>
class B: public A<typename B<T>::Node> {
private:
    struct Node{ int x=42;};
};

感谢您的回复,更具体地说,问题是A是一个树,B是一个类似数组的容器,它使用树结构将我定义的节点保存在内存中。所以容器需要在内部使用节点树。我想这或多或少是数据结构的一种常见设计,那么如何典型地解决这个问题呢?
template<typename T>
class A {};    

template<typename T>
class B: public A<typename B<T>::Node> {
private:
    struct Node{ int x=42;};
};

int main()
{
   B<int> b;
}
template<typename T>
class A { ... };


template <typename T>
class B {
   private:
      struct Node{ int x=42;};
      A<Node> data;
};