派生类中未访问基类构造函数



我正在尝试学习基于C++策略的设计,并编写了以下代码段,但我得到了以下错误:

class 'Binary_Tree<DataType, TreeNode, Traversal_Policy>' does not have any field named 'Tree_Base'
90 |         Binary_Tree(DataType val,Traversal_Policy traversal_policy_type):Root(val),Tree_Base(traversal_policy_type){};

不确定我在哪里犯了错误,因为Tree Base应该可以从Binary_Tree 直接访问

class Tree_Traversal_Policy
{
public:
enum traversal_type{PREFIX=0,INFIX,POSTFIX};
Tree_Traversal_Policy(traversal_type type):m_traversal_type(type){};
private:
traversal_type m_traversal_type;
};
template <typename DataType,template <typename> typename TreeNode,typename Traversal_Policy=Tree_Traversal_Policy>
class Tree_Base:public Traversal_Policy
{
public:
Tree_Base(Traversal_Policy traversal_policy_type):Traversal_Policy(traversal_policy_type){};
};
template <typename DataType,template < typename > typename TreeNode,typename Traversal_Policy>
class Binary_Tree:public Tree_Base<DataType,TreeNode,Traversal_Policy>
{
using BTreeNode_ = TreeNode <DataType>;
BTreeNode_ Root;
public:
Binary_Tree(DataType val,Traversal_Policy traversal_policy_type):Root(val),Tree_Base(traversal_policy_type){};
void add_node(DataType val);
void delete_node(DataType val);
};

从实例化模板类的使用中省略模板参数的能力仅限于模板化类本身的主体。只能在Tree_Base中将Tree_Base简称为Tree_Base;在Binary_Tree和其他地方,您必须使用模板参数对其进行限定。因此:

Binary_Tree(DataType val,Traversal_Policy traversal_policy_type):
Root(val),
Tree_Base<DataType,TreeNode,Traversal_Policy>(traversal_policy_type) 
{};

请注意,通常在类定义中执行类似using Base = Tree_Base<DataType,TreeNode,Traversal_Policy>的操作,以避免所有额外的类型。如果您这样做,您可以简单地在初始值设定项中将其称为Base

最新更新