gpt4 book ai didi

c++ - 没有匹配的构造函数来初始化模板类的构造函数

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:14 26 4
gpt4 key购买 nike

我正在尝试创建一个基于模板的树,其中节点是专门的,以便访问节点元素和子节点的方法返回子节点类型。以下是代码的简化版本。

template<class NodeObjectType, class ChildNodeObjectType, class ChildNode>
class Node {
public:
Node(Node* parent, NodeObjectType* object);
ChildNode* addAsChild(ChildNodeObjectType* object);
private:
NodeObjectType* nodeObject;
std::vector<ChildNode*> children;
};

typedef Node<B, void, void> BNode;
typedef Node<A, B, BNode> ANode;
typedef Node<void, A, ANode> RootNode;

/* constructor */

template<class NodeObjectType, class ChildNodeObjectType, class ChildNode>
ChildNode* Node<NodeObjectType, ChildNodeObjectType, ChildNode>::
addAsChild(ChildNodeObjectType* object)
{
ChildNode* child = new ChildNode(this, object);
children.push_back(child);
return child;
}

错误在 addAsChild 中的 new ChildNode() 调用中。我是在尝试做一些无法完成的事情,还是只是在某处犯了错误?

最佳答案

Node(Node* parent, NodeObjectType* object);

Node在现实中Node<NodeObjectType, ChildNodeObjectType, ChildNode>> .

所以对于 ANode : ANode(ANode* parent, A*);

所以当你做类似的事情时:

A a;
RootNode root(nullptr, nullptr);
ANode anode(nullptr, &a);
root.addAsChild(&a);

你会调用ChildNode* child = new ChildNode(this, object);或者用一些替代品:

ANode child = new ANode(root, &a);
// error: no matching function for call to
// 'Node<A, B, Node<B, void, void> >::Node(Node<void, A, Node<A, B, Node<B, void, void> > >* const, A*&)'

作为RootNode是与 ANode 不同的类型(模板参数不同),存在编译错误。

也许你想要一些 BaseNode作为父节点。

关于c++ - 没有匹配的构造函数来初始化模板类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22029205/

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