首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >派生类中未访问的基类构造函数

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

Stack Overflow用户
提问于 2022-03-14 11:24:47
回答 1查看 104关注 0票数 1

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

代码语言:javascript
复制
 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){};

不知道我在哪里出错,因为树库应该可以从Binary_Tree直接访问

代码语言:javascript
复制
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);
};
EN

回答 1

Stack Overflow用户

发布于 2022-03-14 11:31:59

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

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71466970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档