Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对模板化类的父方法的调用 我是C++的新手,我想从他的孩子中调用一个父虚拟方法,这实际上是一个模板类。我得到以下错误: dependent-name 'bList<T>::bNode' is parsed as a non-type, but instantiation yields a type 依赖名称“bList::bNode”被解析为非类型,但实例化会生成一个类型_C++_Templates - Fatal编程技术网

对模板化类的父方法的调用 我是C++的新手,我想从他的孩子中调用一个父虚拟方法,这实际上是一个模板类。我得到以下错误: dependent-name 'bList<T>::bNode' is parsed as a non-type, but instantiation yields a type 依赖名称“bList::bNode”被解析为非类型,但实例化会生成一个类型

对模板化类的父方法的调用 我是C++的新手,我想从他的孩子中调用一个父虚拟方法,这实际上是一个模板类。我得到以下错误: dependent-name 'bList<T>::bNode' is parsed as a non-type, but instantiation yields a type 依赖名称“bList::bNode”被解析为非类型,但实例化会生成一个类型,c++,templates,C++,Templates,我看过其他帖子,尝试过不同的组合,但都没能解决 template <class T> class bList { protected: class bNode { // PARENT METHOD: public: virtual void chain() { // do something...

我看过其他帖子,尝试过不同的组合,但都没能解决

template <class T>
class bList {
    protected:
        class bNode
        {
            // PARENT METHOD:
            public:
                virtual void chain() {
                    // do something...
                }
        };

    protected:
        virtual bNode* makeNode(T& data) {
            return new bNode();
        }   
};

template <class T>
class cList : public bList<T> {
    protected:
        class cNode : public virtual bList<T>::bNode {

            // CHILD METHOD:
            public:
                virtual typename bList<T>::bNode* chain(typename bList<T>::bNode* node) {
//                  if (...) {
//                      return ...
//                  } 
//                  else {
                        return bList<T>::bNode.chain(node); // <- error!
//                  }
                }
        };

    protected:
        virtual typename bList<T>::bNode* makeNode(T& data) {
            return new cNode();
        }
};
模板
类布利斯特{
受保护的:
B类节点
{
//父方法:
公众:
虚空链(){
//做点什么。。。
}
};
受保护的:
虚拟bNode*makeNode(T&data){
返回新的bNode();
}   
};
模板
类cList:公共bList{
受保护的:
类cNode:公共虚拟bList::bNode{
//子方法:
公众:
虚拟typename bList::bNode*链(typename bList::bNode*节点){
//如果(…){
//返回。。。
//                  } 
//否则{
返回bList::bNode.chain(节点);//
模板
类布利斯特{
受保护的:
B类节点
{
//父方法:
公众:
虚拟typename bList::bNode*节点链(typename bList::bNode*节点){
//做点什么。。。
}
};
受保护的:
虚拟bNode*makeNode(T&data){
返回新的bNode();
}
};
模板
类cList:公共bList{
受保护的:
类cNode:公共虚拟bList::bNode{
//子方法:
公众:
虚拟typename bList::bNode*链(typename bList::bNode*节点){
//如果(…){
//返回。。。
//                  }
//否则{
返回此->bList::bNode::chain(节点);
//                      }
}
};
受保护的:
虚拟类型名bList::bNode*makeNode(T&data){
返回新的cNode();
}
};
我已经更正了您的问题并给出了正确的答案。您的问题的问题是您没有正确重写函数。您的链函数具有不同的签名。

模板
类布利斯特{
受保护的:
B类节点
{
//父方法:
公众:
虚拟typename bList::bNode*节点链(typename bList::bNode*节点){
//做点什么。。。
}
};
受保护的:
虚拟bNode*makeNode(T&data){
返回新的bNode();
}
};
模板
类cList:公共bList{
受保护的:
类cNode:公共虚拟bList::bNode{
//子方法:
公众:
虚拟typename bList::bNode*链(typename bList::bNode*节点){
//如果(…){
//返回。。。
//                  }
//否则{
返回此->bList::bNode::chain(节点);
//                      }
}
};
受保护的:
虚拟类型名bList::bNode*makeNode(T&data){
返回新的cNode();
}
};

我已经更正了您的问题并给出了正确的答案。您问题的问题是您没有正确重写函数。您的链函数具有不同的签名。

您的意思是
bList::bNode::chain(node)
?抱歉,我在试图简化代码以便发布时出错。最初签名是可以的。使用
this->bList::bNode::chain(node);
解决了问题,谢谢。你是说
bList::bNode::chain(node)
?抱歉,我在试图简化代码以便发布时出错。最初签名是可以的。使用
this->bList::bNode::chain(node);
解决了问题,谢谢。
template <class T>
class bList {
    protected:
        class bNode
        {
            // PARENT METHOD:
            public:
            virtual typename bList<T>::bNode* node chain(typename bList<T>::bNode* node) {
                // do something...
            }
        };

    protected:
        virtual bNode* makeNode(T& data) {
            return new bNode();
        }
};

template <class T>
class cList : public bList<T> {
    protected:
        class cNode : public virtual bList<T>::bNode {

            // CHILD METHOD:
            public:
                virtual typename bList<T>::bNode* chain(typename bList<T>::bNode* node) {
//                  if (...) {
//                      return ...
//                  }
//                  else {

                        return this->bList<T>::bNode::chain(node);
//                      }
                }
        };

    protected:
        virtual typename bList<T>::bNode* makeNode(T& data) {
            return new cNode();
        }
};