gpt4 book ai didi

c++ - 调用模板类的父方法

转载 作者:太空宇宙 更新时间:2023-11-04 13:19:35 37 4
gpt4 key购买 nike

我是 C++ 的新手,我正在尝试从他的 child 那里调用父虚方法,这实际上是一个模板化类。我收到以下错误:

dependent-name 'bList<T>::bNode' is parsed as a non-type, but instantiation yields a type

我查看了其他帖子并尝试了不同的组合,但未能解决问题。

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();
}
};

最佳答案

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();
}
};

我已经更正了你的问题并给出了正确的答案。您问题的问题是您没有正确覆盖该功能。您的链函数具有不同的签名。

关于c++ - 调用模板类的父方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35816396/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com