C++ C++;-可访问性与可见性
我正在做一个练习来理解C++的可访问性和可见性 下面的代码显然无法编译,但这是理想情况下必须编译的代码 B使用模板参数节点从A继承,并且节点是B的私有节点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类
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;
};