gpt4 book ai didi

C++ 模板限制成员构造函数

转载 作者:行者123 更新时间:2023-11-30 00:40:06 26 4
gpt4 key购买 nike

这是我第一次涉足 C++ 模板,我正在尝试构建一个 BinaryTree帮助我解决 Project Euler 问题的模板;但是,我似乎在 BinaryTree 处遇到错误类无法识别 BinaryTreeNode 的所有构造函数!这是代码片段。

template <class T>
class BinaryTreeNode
{
private:
BinaryTreeNode<T>* _left;
BinaryTreeNode<T>* _right;
T* _value;

public:
BinaryTreeNode();
explicit BinaryTreeNode(const T& value) : _value(&(T(value))) {}
BinaryTreeNode(BinaryTreeNode<T>& left, BinaryTreeNode<T>& right, const T& value) :
_left(&left), _right(&right), _value(&(T(value))){}
};

二叉树类

#include "BinaryTreeNode.h"
template <class T>
class BinaryTree
{
private:
BinaryTreeNode<T>* _root;
BinaryTreeNode<T>* _current;
unsigned int size;

public:
BinaryTree() : size(0), _root(0), _current(0) { }
explicit BinaryTree(BinaryTree<T>& leftTree, BinaryTree<T>& rightTree, const T& value) :
size(leftTree.Size() + rightTree.Size() + 1), _root(leftTree.Root(), rightTree.Root(), value), _current(_root) {}
explicit BinaryTree(const T& value) : size(1), _root(value) {}
const BinaryTreeNode<T>& Root() const { return *_root;}
};

我遇到了这些错误。

error C2359: 'BinaryTree<T>::_root' : member of non-class type requires single initializer expression
error C2440: 'initializing' : cannot convert from 'const int' to 'BinaryTreeNode<T> *'
error C2439: 'BinaryTree<T>::_root' : member could not be initialized

BinaryTreeNode (BinaryTreeNode<T>&, BinaryTreeNode<T>&, const T& value) 的构造函数当我将它包含在我的主代码中时可以工作,但它似乎在我的 BinaryTree 下不起作用模板。有人知道为什么吗?

最佳答案

在您的初始化表达式 _root(leftTree.Root(), rightTree.Root(), value) 中,_root 是一个指针。您只能将其初始化为另一个指针。也许您的意思是将其初始化为指向基于这些参数构造的新节点的指针?

这可以这样完成:(在您编辑后更新)

_root(new BinaryTreeNode<T>(leftTree.Root(), rightTree.Root(), value))

但是,这是非常危险的(考虑分配中的异常),您应该避免在类设计中使用原始指针,而是使用智能管理指针。

同样,初始化器 _root(value) 做了错误的事情,你可能想要:

_root(new BinaryTreeNode<T>(value))

(另请注意,您应该按照声明的顺序初始化成员。)

更新:我更改了您编辑后的第一个构造函数调用,但正如@Luc 所说,您的构造函数采用非常量参数,但 Root() 仅提供一个 const 引用,因此您仍然需要解决这个问题。

关于C++ 模板限制成员构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7094407/

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